Java getDataVector提供来自TJable的各种数据类型
我有一个JTable,当我使用jTable1.getModel()时,来自不同列的getDataVector()对象有不同的类型(对于我的情况,它们应该都是字符串) 我的表格有五列:Java getDataVector提供来自TJable的各种数据类型,java,swing,jtable,classcastexception,tablemodel,Java,Swing,Jtable,Classcastexception,Tablemodel,我有一个JTable,当我使用jTable1.getModel()时,来自不同列的getDataVector()对象有不同的类型(对于我的情况,它们应该都是字符串) 我的表格有五列: 数字(实际上是字符串,但我在解析它时没有问题) 从附加到单元格的组合框中选择的字符串,但当我想从中获取值时,它似乎是向量,而不是字符串 再次输入数字(如0列-此处无问题) 再次使用combobox字符串,但给我字符串值,所以没有问题 数字(隐藏在字符串中),但这应该是字符串,但却是向量 如何在单元格中创建组合框(第
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);
}
我在第行得到了相同的异常(矩阵=…),但正如您所看到的,我对它进行了不同的铸造,现在它似乎工作得很好。
我起初认为问题与单元格中的组合框有关,但它也发生在用户插入简单字符串的列中
嗯,我可以简单地进行另一次转换,但这让我很烦恼,因为没有它它它应该可以工作(在不同类型的JTable中没有这个问题),这使得代码很难阅读,如果我想用更多的列扩展这个表(这可能在不久的将来发生),我将再次遇到同样的问题
有人知道它为什么会这样工作吗?如果有任何方法可以强迫jtable(或model)以统一格式给我单元格的值?而不是强迫您的
列表
成为默认表模型
,扩展AbstractTableModel
可能更易于维护,如中所建议的那样。特别是,您可以重写getColumnClass()
,以指定每个基准的精确类型。这具有启用多个默认值的直接好处。这里有一个相关的例子。如中所建议的,扩展AbstractTableModel
可能更易于维护,而不是将列表
强制为DefaultTableModel
。特别是,您可以重写getColumnClass()
,以指定每个基准的精确类型。这具有启用多个默认值的直接好处。有一个相关的例子
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)));
}
Exception occurred during event dispatching:
java.lang.ClassCastException: java.util.Vector cannot be cast to java.lang.String