我有一个有三列的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?
答案 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];
}
});