创建自定义ListCellRenderer:
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
/**
*
* @author Spencer
*/
public class TaskRenderer implements ListCellRenderer {
private Task task;
private JPanel panel = new JPanel();
private JCheckBox checkbox = new JCheckBox();
private JLabel label = new JLabel();
public TaskRenderer() {
panel.add(checkbox);
panel.add(label);
}
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
task = (Task) value;
label.setText(task.getName());
return panel;
}
}使用上面的类呈现一个包含每个单元格的JList,但是不能单击每个单元格的面板中的复选框。我以为是因为它没有得到关注。有什么想法吗?
谢谢,斯宾塞
发布于 2010-05-14 18:25:42
您的自定义渲染器只是控制JList内容的外观,而不是添加任何功能,如修改组件的能力(复选框)-想象一下,它只是一个橡皮图章,用于依次显示每个列表单元格。
我建议通过以下方式解决这个问题:
发布于 2010-05-29 01:15:58
JIDE Common Layer有一个通用公共许可证的CheckBoxList。基本上,它使用一个JPanel作为单元格渲染器,在另一个渲染器(您可以自己设置)前面有一个JCheckBox,并处理鼠标/键事件。
如果你真的想坚持你的JCheckBox渲染器,你可以监听鼠标/键事件,并适当地处理它们。请记住,正如Adamski指出的,单元格渲染器是一个橡皮图章(Swing 101),因此您必须始终在getListCellRendererComponent()中将复选框设置为选中状态,否则所有复选框都将具有保存状态。
https://stackoverflow.com/questions/2833070
复制相似问题