【问题标题】:Unable to use DefaultTableModel in JTable无法在 JTable 中使用 DefaultTableModel
【发布时间】:2015-06-05 16:00:14
【问题描述】:
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 以及如何解决它?

【问题讨论】:

  • 为了尽快获得更好的帮助,请发布MCVE(最小完整可验证示例)或SSCCE(简短、独立、正确示例)。

标签: java swing jtable classcastexception defaulttablemodel


【解决方案1】:

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

遍历行并分别添加。

model.addRow(rowData); 替换为:

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

【讨论】:

  • 很高兴知道...如果您满意,请将其标记为答案。
  • 先生,我还有一个问题.. 使用线程显示包含 JTable 的 JFrame 是否重要,该 JTable 使用 DefaultTableModel 呈现列和行.. 请.. 帮助
  • 按线程你是指不同的线程吗???通常所有 Swing GUI 操作都应该在 EDT(事件调度线程)上执行,而其他冗长的操作应该在另一个线程上执行,否则 GUI 将冻结。看看docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 2021-03-01
  • 2019-06-23
  • 2014-03-18
  • 2016-02-28
相关资源
最近更新 更多