java - 无法在 JTable 中使用 DefaultTableModel

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

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

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

关于java - 无法在 JTable 中使用 DefaultTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30670919/

相关文章:

java - 当用户不触摸 JScrollpane 时隐藏 JScrollPane 的 ScrollBar

java - 计算 jtable 中的行总和

java - JTable#repaint() 未按预期运行

java - 如何获取图像的dpi(Java)

java - 在 java 集合中搜索对象

java - 以更好的方式更新 EAR 文件中的单个文件

java - JTable:选择一行时从数据库中获取值

java - 将带有前景标签的图像添加到 Jbutton

java - 如何在编辑时选择JTable单元格中的所有文本

java - pig ToDate(日期 ,'dd/MMM/yyyy')问题