如何使JTable列包含复选框?

时间:2010-05-25 01:40:33

标签: java swing jtable jcheckbox tablecellrenderer

前言:我对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的好教程的链接。 非常感谢任何协助:)

5 个答案:

答案 0 :(得分:24)

无需创建自己的表格渲染器。 Here's a simpler example。只需创建一个自定义表模型,对于给定的列,返回类Boolean:

public Class getColumnClass(int column)

如果您希望列可编辑,请为

返回true
public boolean isCellEditable(int row, int column)

JTable为您处理渲染。

Another example is here.

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

这是使用TableCellRendererTableCellEditor简单而非精心设计的example。另请参阅Concepts: Editors and Renderers

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

答案 3 :(得分:3)

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

答案 4 :(得分:-5)

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