编辑JTable时,矢量类类型发生了变化

时间:2013-10-29 07:44:48

标签: java swing vector jtable

我有一个有三列的JTable:

String,PropertyItem(自定义类),字符串

PropertyItem 在表中显示为作为字符串但类型为PropertyItem。以下是表格的示例行:

价值面具|格式约束|值掩码规则子类型

使用Vector:

获取表的数据
List<Vector> displayedData = table_propertyDetails.getDataMatrix();

并遍历表数据,如下所示:

for(Vector row : displayedData) { ... }

现在,row.get(index)函数用于获取列数据,并通过类型转换为String 0和2的字符串。对于PropertyItem列,它以(PropertyItem)row.get(index)完成。因此,很多事情都很好,并且在正常列表/提取行中不会出现任何问题。

现在,当编辑此表的第二列(PropertyItem)时,它将变为String和(PropertyItem)row.get(index)返回该行的错误:

  

java.lang.String无法强制转换为   com.abc.xyz.model.PropertyItem

对于未编辑数据的所有其他行,此转换完成没有任何错误,但对于已编辑的行,则会导致此错误。

我知道在这个时候或者在此之前我可以做什么来将String转换回PropertyItem?

2 个答案:

答案 0 :(得分:3)

似乎,您使用 DefaultTableModel ,在这种情况下,我建议您编写自己的TableCellEditor来编辑自定义列。在您的实现中,您可以根据需要编辑对象。

答案 1 :(得分:1)

我试图理解解释并写回答WRT过去的错误。

我认为您需要在创建TableModel时查看JTable JTable您正在设置的数据类型。

如果您对所有三列使用String,则将其更改为Object第二列。

因为您要在第一列和第三列中添加String,所以您可以在第二列添加PropertyItem的对象,第二列的DataType可能是String转换为String并且get()方法将从表返回一个字符串,并且将发生Casting错误。

我希望,更改TableModel中第二列的类型可以解决问题。

示例:

myTable.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null},
        {null, null, null},
        {null, null, null},
        {null, null, null}
    },
    new String [] {
        "Column 1", "Column 2", "Column 3"
    }
    ) {
    Class[] types = new Class [] {
        java.lang.String.class, java.lang.Object.class, java.lang.String.class
    };

    public Class getColumnClass(int columnIndex) {
        return types [columnIndex];
    }
});