无法在 JTable 中使用 DefaultTableModel

Unable to use DefaultTableModel in JTable

Object rowData[][] = {
        {1, "", null, "", "", false, ""},
        {2, "", null, "", "", false, ""},
        {3, "", null, "", "", false, ""},
        {4, "", null, "", "", false, ""},
        {5, "", null, "", "", false, ""},
        {6, "", null, "", "", false, ""}
    };

    DefaultTableModel model = new DefaultTableModel() {
        @Override
        public Class<?> getColumnClass(int columnIndex) {
            switch (columnIndex) {
                case 0:
                    return Integer.class;
                case 1:
                    return String.class;
                case 2:
                    return Integer.class;
                case 3:
                    return String.class;
                case 4:
                    return String.class;
                case 5:
                    return Boolean.class;
                case 6:
                    return String.class;
                default:
                    return super.getColumnClass(columnIndex);
            }
        }
    };
    model.addColumn("Sr No.");
    model.addColumn("Name");
    model.addColumn("Age");
    model.addColumn("Gender");
    model.addColumn("City");
    model.addColumn("isChild");
    model.addColumn("Address");
    model.addRow(rowData);

    JTable table = new JTable(model);
    table.setRowHeight(20);
    table.setRowMargin(2);
    table.getColumnModel().getColumn(0).setMaxWidth(50);

    TableColumn childColumn = table.getColumnModel().getColumn(5);
    JCheckBox childBox = new JCheckBox();
    childColumn.setCellEditor(new DefaultCellEditor(childBox));

我已经编写了上面的代码来向用户显示 table 并且倒数第二列需要是一个复选框。所以我在谷歌上搜索并从许多来源中挑选了一小部分后找到了下面的代码,但我遇到了以下异常:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:     
   [Ljava.lang.Object; cannot be cast to java.lang.Boolean

当我在 switch case 中将 Boolean.class 更改为 String.class 时,它没有显示任何异常,但我在行中获取的值为 java.lang.String

因为我是 JFrameJTable 等方面的新手。我无法确定我做错了什么。为什么 ClassCastException 以及如何解决它?

DefaultTableModel.addRow(Object[])只能添加一行。但是您要做的是添加多行。

遍历行并分别添加。

model.addRow(rowData);替换为:

for (Object[] row : rowData) {
    model.addRow(row);
}