如何使JTable列包含复选框?

前言:我对java很糟糕,对java ui组件更糟糕。

我找到了几个关于如何向表添加按钮的不同教程,但是我正在努力添加复选框。 我需要有一个列,在默认情况下绘制一个文本框(我认为处理的是单元格渲染器),然后单击复选框,取消选中框,重新绘制所述框,并触发我可以跟踪的某个地方的事件。

目前我有一个自定义的cellrenderer:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer { public GraphButtonCellRenderer() { } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(isSelected) setSelected(true); else setSelected(false); setMargin(new Insets(0, 16, 0, 0)); setIconTextGap(0); setBackground(new Color(255,255,255,0)); return this; }} 

其中当前处理勾选框,但只有勾选并取消选中该行的框。 但我不知道如何处理这些事件。 真的我要问的可能是一个关于如何干净地将复选框添加到JTable的好教程的链接。 非常感谢任何协助:)

无需创建自己的表格渲染器。 这是一个更简单的例子 。 只需创建一个自定义表模型,对于给定列,返回类Boolean:

 public Class getColumnClass(int column) 

如果希望列可编辑,请返回true

 public boolean isCellEditable(int row, int column) 

JTable为您处理渲染。

另一个例子就在这里。

正如Peter所说,使用扩展的DefaultTableModel类很容易,例如:

 class NewTableModel extends DefaultTableModel{ public Class getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } } 

这是一个使用TableCellRendererTableCellEditor简单而精细的示例 。 另请参见概念:编辑器和渲染器

附录:@Jay Askren的观点很好。 如教程中所述, Boolean.class的默认渲染器可能就是您所需要的。

最简单的解决方案是使用DefaultTableModel并使用Boolean对象作为值。

在Swing Designer中将列类型设置为boolean