У меня есть JTable, и когда я использую jTable1.getModel ()). GetDataVector () объекты из разных столбцов имеют разные типы (они должны быть всеми строками для моего случая)
В моей таблице пять столбцов:
число (на самом деле это строка, но у меня нет проблем с ее разбором)
Строка, выбранная из выпадающего списка, присоединенного к ячейке, но когда яхочу получить из него значение, которое представляется Vector, а не String
снова число (как в 0 столбце - здесь нет проблем)
снова String с выпадающим списком, но дает мне строковое значение, так что нет проблем
число (скрыто в String), но опять же это должно быть String, но это Vector
как я создаю комбинированные списки в ячейках (столбцы 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
Я получаю то же исключениеn в строке (matrix = ...), но, как вы можете видеть, я произнес это по-другому, и теперь он, кажется, работает нормально.Сначала я подумал, что проблема связана с выпадающими списками в ячейках, но это также происходит в столбце, где пользователь вставляет простую строку.
Что ж, я могу просто выполнить другое приведение, но это беспокоит меня, потому чтоон должен работать без него (такой проблемы не было в разных типах JTables), это делает код трудным для чтения, и если когда-нибудь захочется расширить эту таблицу большим количеством столбцов (что может произойти в ближайшем будущем), и я снова буду боротьсяс той же проблемой.
Кто-нибудь имеет какие-либо идеи, почему это работает так, и если есть какой-либо способ заставить jtable (или модель) дать мне значения ячеек в унифицированном формате?