java - 如何在 JList 中的组件上启用事件

标签 java user-interface swing

我在 JList 上使用自定义渲染器,但渲染的所有组件均不可访问。

list.setCellRenderer(new ListCellRenderer() {

    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {

        JCheckBox c = new JCheckBox();
        JButton b = new JButton("My Button!");

        JPanel p = new JPanel(new FlowLayout());
        p.add(c);
        p.add(b);

        if (isSelected) {
            p.setBackground(Color.LIGHT_GRAY);
        }
        return p;
    }
});

单击复选框或按钮不会执行任何操作。我还尝试将 ActionListener 添加到按钮,但单击时它没有触发。唯一有效的是选定项目时的背景颜色(参见屏幕截图)。

当我点击按钮时,甚至没有“点击动画”。

alt text http://foto.darth.cz/pictures/2009-05-19_151057.png

所以我的问题是,我是否需要做其他事情才能在渲染的组件上启用事件?

最佳答案

实际上与表格相同。渲染器组件实际上并不是真正的组件。它就像用来绘制假组件的模板。为什么不尝试将组件粘贴在 JScrollPane 中或将它们放入一列 JTable 中并实现适当的渲染器/编辑器?

关于java - 如何在 JList 中的组件上启用事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/882675/

相关文章:

python - 随着时间的推移,Tkinter GUI 应用程序运行速度会变慢

python - 在 Kivy 中启动多个小部件

java - 无法在 JLabel 上显示图像

Java - JRadioButton选择出现面板

java - 如何在jtextarea中显示for循环的结果? java

java - 如何将 QUARTZ JOB 设置为仅在另一个 JOB 完成、停止时启动?

java - 这两个java.io.File线程安全问题是否被规避了?

java - 将子对象强制转换为不同的 Java 子对象

java - 具有多个属性和功能的自定义标签?

java - java中如何动态显示流程图?