Java Swing - JList 自定义单元格渲染 - 捕获 Action

标签 java swing jlist cellrenderer

每当我为 JList 创建自定义单元格渲染器时,我添加到其中的任何元素都不会响应操作。例如,如果我让单元格渲染器返回一个带有元素的 JPanel,其中一个元素有一个 ActionListener,它根本不会响应。

这是为什么?

最佳答案

渲染器可能看起来像一个为单元格返回组件的工厂,但实际上它遵循享元渲染方法并使用相同组件渲染所有单元格(每次调用 getListCellRendererComponent() 都应该为特定单元格重新配置相同的组件实例并返回它,以便可以呈现单元格)。

这样,您可以让 JList(以及 JTableJTree)显示大量的单元格,而无需实例化组件每个细胞。作为副作用,渲染组件无法响应事件,因为它仅在渲染循环期间使用,但不会出现在组件树中。

正如 Neil Coffey 所说,您可以将监听器添加到 JList(JTableJTree),并使用辅助方法(locationToIndex(...), getCellBounds(...)) 分派(dispatch)受影响的单元格,从而处理单元格特定逻辑。

关于Java Swing - JList 自定义单元格渲染 - 捕获 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742958/

相关文章:

java - 在Java应用程序中加密用户名/密码然后将它们传输到服务器的最佳方法

java - 如何从另一个类访问 JButton

java - 从 JList 中删除单词,无论大小写如何

java - 为什么当我将 JList 插入到带有 GridLayout 的对话框中时组件变大?

java - 实例化 BufferedImage 的步骤

在创建时注册为监听器的 Java 枚举

java - 当它在代理后面时,我如何可靠地访问 jspx 中的 HttpServletRequest?

java - 用各自的字段 Swing 排列标签

java - Jspinner 显示文件中的图像

java - 获取 jlist 的选定值