java - DefaultTableModel - 删除行更新 vector ,添加不会

标签 java vector jtable defaulttablemodel

所以事情是这样的。我有一个JTable在我的框架中显示一些可以编辑的数据。可以添加新行,可以删除旧行。

现在,如果我从一个填充了一些数据的表开始,它就可以正常工作。我能够删除行,这也会从我的数据中删除行 Vector<Vector> 。但是,当我添加一行时,该行显示在我的表格中,但更改并未反射(reflect)在数据中。

Vector<Object> newQuestion = new Vector<Object>(3, 1);
newQuestion.add(question.getText());
newQuestion.add(answer.getText());
newQuestion.add(false);
model.addRow(newQuestion); // Update the model with new question

modelDefaultTableModel 。我试过model.fireTableDataChanged();即使 DTM 自己触发了它,但这也不起作用。

有什么指点吗?

编辑:有趣的是,如果我从表中的一些数据开始并添加一行,则更改也会反射(reflect)在数据中。

编辑2:https://github.com/thekarangoel/YALT/blob/master/src/editDB.java从第 65 行开始添加一行!要尝试,编译,运行,文件>添加新数据库。给个名字。添加新行。

编辑 3:对于此代码: System.out.println("数据:"+ 数据); vector > modelData = model.getDataVector(); System.out.println("数据:"+ modelData);

我明白了:

Data: null
Data: [[w, a, false]]

第一个 if 数据来 self 的 vector 。第二个是“model”的 Vector 中的数据。为什么会发生这种情况?当我向现有表添加内容时,文件行也会显示更改。

最佳答案

看看您如何创建数据:

public Vector<Vector<Object>> convertMapToVector(Map<String, String> quesToAnsMap) {
    if (quesToAnsMap.size() > 0) {
        // the data field is initialized here
        data = new Vector<Vector<Object>>(quesToAnsMap.size(), 1); 
        ...
        return data;
    }
    // but not here
    return new Vector<Vector<Object>>();
}

我对使代码更加健壮的建议:

  • 不要使用数据字段。它没有用,因为数据已经包含在模型中。因此,要获取数据,您只需从模型中获取即可。
  • 要么让所有方法接受参数和返回值,要么不接受任何内容,返回 void 并初始化字段,但混合两者会令人困惑。上面的方法初始化一个字段并返回它,但 else 子句只返回它而不初始化它。

关于java - DefaultTableModel - 删除行更新 vector ,添加不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602019/

相关文章:

java - Spring-Boot 使用依赖 jar 中的 JSP

haskell - 如何修改或读取作为函数参数传递的可变向量?

java - 如何使 JScrollPane 在表开头添加行后不滚动

java - 在 jTable 上使用 Enter 键就像 Tab 键

java - 如何检查 LinkedList 中的索引处是否存在元素

java - org.openqa.selenium.NoSuchElementException : Unable to locate element:

java - 可运行的jar文件可以解释回java源代码吗

c++ - vector 迭代器不兼容(段错误)

c++ - 错误 C2280;执行 employees.erase() 时出现 operator =(const Employee &) 问题

java - 使用 beans 绑定(bind)搜索 jTable