每当我为 JList 创建自定义单元格渲染器时,我添加到其中的任何元素都不会响应操作。例如,如果我让单元格渲染器返回一个带有元素的 JPanel,其中一个元素有一个 ActionListener,它根本不会响应。
这是为什么?
最佳答案
渲染器可能看起来像一个为单元格返回组件的工厂,但实际上它遵循享元渲染方法并使用相同组件渲染所有单元格(每次调用 getListCellRendererComponent()
都应该为特定单元格重新配置相同的组件实例并返回它,以便可以呈现单元格)。
这样,您可以让 JList
(以及 JTable
和 JTree
)显示大量的单元格,而无需实例化组件每个细胞。作为副作用,渲染组件无法响应事件,因为它仅在渲染循环期间使用,但不会出现在组件树中。
正如 Neil Coffey 所说,您可以将监听器添加到 JList
(JTable
、JTree
),并使用辅助方法(locationToIndex(...)
, getCellBounds(...)
) 分派(dispatch)受影响的单元格,从而处理单元格特定逻辑。
关于Java Swing - JList 自定义单元格渲染 - 捕获 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742958/