0

我有一个包含三列的 JTable:

字符串、PropertyItem(自定义类)、字符串

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

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

使用 Vector 获取表的数据:

List<Vector> displayedData = table_propertyDetails.getDataMatrix();

并像这样遍历表数据:

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

现在,row.get(index) 函数用于获取第 0 列和第 2 列的类型转换为 String 的列数据。对于 PropertyItem 列,它作为 (PropertyItem) row.get(index) 完成。所以,到目前为止一切都很好,并且在正常的行列表/获取中没有出现任何问题。

现在,当编辑此表的第二列 (PropertyItem) 时,它会变成一个字符串,并且 (PropertyItem) row.get(index) 为该行返回错误:

java.lang.String 不能转换为 com.abc.xyz.model.PropertyItem

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

知道我可以在此时或在此之前将 String 转换回 PropertyItem 吗?

4

2 回答 2

3

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

于 2013-10-29T07:58:07.453 回答
1

我试图理解解释和写作答案 WRT 我过去的错误。

我认为您需要查看TableModelJTable在创建JTable.

如果您使用String所有三列而不是将其更改Object为第二列。

因为您String在第一列和第三列中添加了一个它会起作用,但是您PropertyItem在第二列中添加 Object 并且第二列的 DataType 可能String会被转换为String并且get()方法将从表中返回一个字符串并且会发生转换错误。

我希望,更改第二列的类型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];
    }
});
于 2013-10-29T13:46:19.143 回答