将CheckBox添加到DefaultTableModel

时间:2010-11-30 18:03:41

标签: java swing checkbox

我有一个DefaultTableModel,它填充了Object [] []数组。

现在我想添加一个带有checkBoxes的列并相应地执行操作。

当我将复选框添加到Object [] []数组并查看它时,我会显示文本

'javax.swing.JCheckBox [,0,0,0x0 ....',如何让它显示一个复选框并为其添加动作?

5 个答案:

答案 0 :(得分:4)

JTable具有默认的复选框渲染器/编辑器,用于布尔值。只需让TableModel#getColumnClass返回给定列的Boolean.class

答案 1 :(得分:2)

  

如何让它显示复选框

见Uhlen的回答

  

并向其添加操作?

使用TableModelListener。类似的东西:

public void tableChanged(TableModelEvent e)
{
    if (e.getType() == TableModelEvent.UPDATE)
    {
        int row = e.getFirstRow();
        int column = e.getColumn();

        if (column == ?)
        {
            TableModel model = (TableModel)e.getSource();
            Boolean value = (Boolean)model.getValueAt(row, column));

            if (value.booleanValue())
                // add your code here
        }
    }
}

答案 2 :(得分:2)

您也可以获取该类,而不是对每种返回类型进行硬编码。以下是覆盖方法的示例:

 //create the table 
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames)
//override the method


               {
        public Class<?> getColumnClass(int colIndex) {

                return getValueAt(0, colIndex).getClass();

            }

然后,当您创建表时,您可以通过以下方式初始化它:

 data[i][12] = new Boolean(false);

使框看起来没有了:)

答案 3 :(得分:0)

您可以使用自定义表格单元格渲染器。

见这里

http://www.exampledepot.com/egs/javax.swing.table/CustRend.html

答案 4 :(得分:0)

不,你不能提供swing组件作为模型对象[]数组。这应该在列上注册为单元格编辑器。

默认情况下,DefaultTableModel支持复选框作为存储布尔类类型值的列的编辑器。

因此,在数组中传递Boolean.TRUE / Boolean.FALSE对象并将表设置为可编辑。然后表会自动为您呈现复选框。

您是否需要为每个班级类型注册编辑器