java - 带有自定义渲染器的 JList

标签 java swing jpanel jlist

我有一个显示多个 JPanel 的 JList,我创建了一个返回新 JPanel 的自定义渲染器。 JPanel 显示在 JList 中,但它们不可访问,我无法选择它们,如果其中有按钮或文本区域,我也无法按下它。 我想试试这在 JList 中是否有效,因为我想做进一步的分页。我设法通过将面板添加到 Jscroll Pane 来让它工作,但我很想让 JList 工作。

谢谢

最佳答案

这是JList(和JTabelJComboBox 等...)的正常行为。

您的自定义呈现器返回的 JPanel 未添加到 Swing 层次结构中。 JList 仅使用其 paint 方法在正确的位置绘制渲染器。渲染器只是一个印章,你在 JList 中看到的不是组件,而是组件的图像。

这是一种在屏幕上显示许多组件的有效方式,而无需实际实例化组件的开销。请注意,您的渲染器可以始终返回相同的实例(甚至更可取)。

参见 Swing tutorial了解更多详情。

如果您希望 JList 的条目像真正的组件一样工作,您可以执行以下操作。首先,使用 JTable 而不是 JList。具有一列且没有标题的 JTableJList 大致相同。为什么要使用 JTable?因为 JTable 提供了 Editors。编辑器在 JTable 上注册,就像渲染器一样。当用户单击 JTable 的单元格时,通常会出现一个编辑器。编辑器叠加在渲染器之上,这次它是一个真正的组件。如果渲染器和编辑器组件相同,则用户会感觉 JTable 的单元格是真实组件。

Swing tutorial有这种技术的例子。

关于java - 带有自定义渲染器的 JList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4616390/

相关文章:

将 Grails 应用程序部署到 Tomcat 时出现 javax.websocket.DeploymentException

java - 接口(interface)如何隐藏实现细节

java - 获取选定 JTable 单元格的位置?

Java 如何从 ActionListener 类继承变量

java - 我应该使用什么布局管理器

java - 如何用Java Graphics绘制带边框的三角形

java - tic tac toe java 用户 vs 计算机

Java数据库连接

Java 与 JPanel

java - 基于其paintComponent的可滚动JPanel