Java getDataVector提供来自TJable的各种数据类型

Java getDataVector提供来自TJable的各种数据类型,java,swing,jtable,classcastexception,tablemodel,Java,Swing,Jtable,Classcastexception,Tablemodel,我有一个JTable,当我使用jTable1.getModel()时,来自不同列的getDataVector()对象有不同的类型(对于我的情况,它们应该都是字符串) 我的表格有五列: 数字(实际上是字符串,但我在解析它时没有问题) 从附加到单元格的组合框中选择的字符串,但当我想从中获取值时,它似乎是向量,而不是字符串 再次输入数字(如0列-此处无问题) 再次使用combobox字符串,但给我字符串值,所以没有问题 数字(隐藏在字符串中),但这应该是字符串,但却是向量 如何在单元格中创建组合框(第

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

我的表格有五列:

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

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

  • 再次输入数字(如0列-此处无问题)

  • 再次使用combobox字符串,但给我字符串值,所以没有问题

  • 数字(隐藏在字符串中),但这应该是字符串,但却是向量

  • 如何在单元格中创建组合框(第1列和第3列):

    如何创建表格模型:

       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