无法在JTable中使用DefaultTableModel

时间:2015-06-05 16:00:14

标签: java swing jtable classcastexception defaulttablemodel

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));

我已经编写了上面的代码来向用户显示一个表,而最后一列需要是一个复选框。所以我用Google搜索并在从许多来源中选择了一小部分之后找到了以下代码,但我得到的是以下异常:

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

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

我不熟悉JFrameJTable等。我无法确定我做错了什么。为什么ClassCastException以及如何修复它?

1 个答案:

答案 0 :(得分:1)

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

迭代行并分别添加每个行。

model.addRow(rowData);替换为:

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