Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将复选框添加到DefaultTableModel_Java_Swing_Checkbox - Fatal编程技术网

Java 将复选框添加到DefaultTableModel

Java 将复选框添加到DefaultTableModel,java,swing,checkbox,Java,Swing,Checkbox,我有一个DefaultTableModel,其中填充了一个对象[][]数组 现在我想添加一个带有复选框的列,并相应地执行操作 当我将复选框添加到对象[][]数组并查看它时,会显示文本 “javax.swing.JCheckBox[,0,0,0x0…”,如何使其显示复选框并向其添加操作?您可以使用自定义表格单元格呈现程序 看这里 JTable具有布尔值的默认复选框呈现器/编辑器。只需使您的TableModel#getColumnClass返回给定列的boolean.class。否您不能将swing

我有一个DefaultTableModel,其中填充了一个对象[][]数组

现在我想添加一个带有复选框的列,并相应地执行操作

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


“javax.swing.JCheckBox[,0,0,0x0…”,如何使其显示复选框并向其添加操作?

您可以使用自定义表格单元格呈现程序

看这里


JTable具有布尔值的默认复选框呈现器/编辑器。只需使您的
TableModel#getColumnClass
返回给定列的
boolean.class

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

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

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

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

如何使其显示复选框

见乌伦的回答

并为其添加操作

使用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
        }
    }
}

您也可以只获取类,而不是对每个返回类型进行硬编码。下面是override方法的示例:

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


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

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

            }

这使得该框看起来没有勾选:)

很可能是因为您尚未实现TableModel#getColumnClass,请参见我的答案:)如何将TableModelEvent添加到TableModel?@Teysz,
table.getModel.addTableModelListener(…);
 data[i][12] = new Boolean(false);