[英]Java Swing - JList custom cell rendering - capturing actions
每当我为JList创建自定义单元格渲染器时,我添加到它的任何元素都不会响应操作。 例如,如果我让单元格渲染器返回一个带有元素的JPanel,其中一个具有ActionListener,则它根本不响应。
为什么是这样?
渲染器可能看起来像是返回单元组件的工厂,但实际上它遵循flyweight渲染方法并使用相同的组件来渲染所有单元格(每次调用getListCellRendererComponent()
都应该重新配置相同的组件实例特定的单元格并返回它以便可以渲染单元格)。
这样,您可以让JList
(以及JTable
和JTree
)显示大量单元格,而无需为每个单元格实现组件。 作为副作用,渲染组件无法响应事件,因为它仅在渲染循环期间使用,但不会出现在组件树中。
正如Neil Coffey所说,你可以将你的监听器添加到JList
( JTable
, JTree
),并使用辅助方法( locationToIndex(...)
, getCellBounds(...)
)来分派哪个单元受到影响,从而处理具有细胞特定逻辑。
作为列表单元格渲染器返回的项目仅用于: 渲染 。 使用JList注册侦听器(通常,您需要ListSelectionListener)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.