我在 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/