无法在 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
等
因为我是 JFrame
、JTable
等方面的新手。我无法确定我做错了什么。为什么 ClassCastException
以及如何解决它?
DefaultTableModel.addRow(Object[])
只能添加一行。但是您要做的是添加多行。
遍历行并分别添加。
将model.addRow(rowData);
替换为:
for (Object[] row : rowData) {
model.addRow(row);
}
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
等
因为我是 JFrame
、JTable
等方面的新手。我无法确定我做错了什么。为什么 ClassCastException
以及如何解决它?
DefaultTableModel.addRow(Object[])
只能添加一行。但是您要做的是添加多行。
遍历行并分别添加。
将model.addRow(rowData);
替换为:
for (Object[] row : rowData) {
model.addRow(row);
}