的Java Swing - JList的自定义单元格渲染 - 捕捉动作
-
09-09-2019 - |
题
任何时候,我做一个自定义单元格渲染一个JList,我给它添加任何元素永远不应对行动。例如,如果我有细胞渲染器返回与在其上的元件,其中一个具有一个ActionListener一个JPanel,它不会在所有的反应。
这是为什么?
解决方案
返回的列单元格渲染该项目是为正是为渲染。注册听众将JList(通常,你会想要一个ListSelectionListener)。
其他提示
渲染器可能看起来像一个工厂返回部件的细胞,但实际上它遵循的轻量级呈现强>方法和使用相同组件用于呈现所有单元(每次调用getListCellRendererComponent()
应该重新配置相同的组件实例为特定小区并返回它使细胞可以呈现)。
这样一来,就可以有JList
(以及JTable
和JTree
),而不必实例化的组件的每个单元格中显示细胞大量量。作为副作用,渲染组件不能响应事件,因为它呈现循环期间只使用,但没有出现在该组件树。
正如尼尔·科菲说,你可以添加你的听众到JList
(JTable
,JTree
)来代替,然后使用辅助方法(locationToIndex(...)
,getCellBounds(...)
)分配给哪个小区受到影响,因此处理单元的特定逻辑。
不隶属于 StackOverflow