1

我有一个 JTable,当我使用 jTable1.getModel()).getDataVector() 来自不同列的对象有不同的类型(对于我来说,它们应该都是字符串)

我的表有五列:

  1. 数字(实际上是字符串,但我解析它没有问题)

  2. 从附加到单元格的组合框中选择的字符串,但是当我想从中获取值时,它似乎是向量,而不是字符串

  3. 再次编号(如在 0 列中 - 这里没问题)

  4. 再次带有组合框的字符串,但给了我字符串值,所以没问题

  5. 数字(隐藏在字符串中),但这应该是字符串,但它是向量

我如何在单元格中创建组合框(第 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(或模型)以统一格式给我单元格的值?

4

1 回答 1

1

正如创建表模型中所建议的那样,扩展它可能更易于维护,而不是强制您List<List<String>>进入。特别是,您可以覆盖以指定每个基准的精确类型。这具有启用多个默认编辑器和渲染器的直接好处。这里有一个相关的例子。DefaultTableModelAbstractTableModelgetColumnClass()

于 2011-03-25T00:38:47.683 回答