我有一个 JTable,当我使用 jTable1.getModel()).getDataVector() 来自不同列的对象有不同的类型(对于我来说,它们应该都是字符串)
我的表有五列:
数字(实际上是字符串,但我解析它没有问题)
从附加到单元格的组合框中选择的字符串,但是当我想从中获取值时,它似乎是向量,而不是字符串
再次编号(如在 0 列中 - 这里没问题)
再次带有组合框的字符串,但给了我字符串值,所以没问题
数字(隐藏在字符串中),但这应该是字符串,但它是向量
我如何在单元格中创建组合框(第 1 列和第 3 列):
TableColumn column = jTable1.getColumnModel().getColumn(3);
JComboBox cb = new JComboBox(ServerIntf.DataModificationType.getStringList().toArray());
column.setCellEditor(new DefaultCellEditor(cb));
我如何创建表模型:
public TableModel getTableModel() {
Vector<Vector<String>> data = task.getDataSet(dataName);
ServerIntf.SimpleDataType sdt = Manager.manager.getSimpleDataType(task, dataName);
rowsMin = sdt.getRowMin();
rowsMax = sdt.getRowMax();
columnsMin = sdt.getColMin();
columnsMax = sdt.getColMax();
if (data != null) {
//nothing important here, it doeasn't come into this part anyway
}
int cmax = 5;
int rmax = 1;
Vector columns = new Vector(cmax);
columns.addAll(Arrays.asList(new String[]{"ID", "Przekształcenie", "Ile razy", "Co z danymi", "Co dalej"}));
return new DefaultTableModel(columns, rmax);
}
这就是我读取数据的方式:
public AlgorythmTable(List get) {
steps = new Vector<Step>();
for (List<String> row : (List<List<String>>) get) {
steps.add(new Step(row));
}
//boring here
}
//...
public Step(List list) {
id = Integer.parseInt((String) list.get(0));
matrix = ((String) ((Vector) list.get(1)).get(0)).isEmpty() ? null : ((String) ((Vector) list.get(1)).get(0));
count = ((String) list.get(2))==null || ((String) list.get(2)).isEmpty() ? 0 : Integer.parseInt((String) list.get(2));
after = ((String) list.get(3)).isEmpty() ? null : ServerIntf.DataModificationType.getByName((String) list.get(3));
nextStep = ((String) list.get(4))==null || ((String) list.get(4)).isEmpty() ? -1 : Integer.parseInt(((String) list.get(1)));
}
我在最后一行得到 CastException (nextStep = ...)
Exception occurred during event dispatching:
java.lang.ClassCastException: java.util.Vector cannot be cast to java.lang.String
我在 (matrix = ...) 线上遇到了同样的异常,但正如你所看到的,我以不同的方式投射它,现在它似乎工作正常。起初我以为问题与单元格中的组合框有关,但它也发生在用户插入简单字符串的列中。
好吧,我可以简单地进行另一个强制转换,但这让我很困扰,因为没有它它应该可以工作(在不同类型的 JTables 中没有这个问题),这使得代码难以阅读,如果想要用更多列扩展这个表(这可能会在不久的将来发生)我将再次为同样的问题而苦苦挣扎。
有谁知道,为什么它会这样工作,是否有任何方法可以强制 jtable(或模型)以统一格式给我单元格的值?