0

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

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

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

model是一个DefaultTableModelmodel.fireTableDataChanged();即使 DTM 自行触发,我也尝试过,但这也不起作用。

任何指针?

编辑:有趣的是,如果我从表中的一些数据开始,然后添加一行,则更改也会反映在数据中。

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

编辑 3:对于此代码: System.out.println("Data:" + data); 矢量> 模型数据 = 模型.getDataVector(); System.out.println("数据:" + modelData);

我明白了:

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

第一个 if 数据来自我的 Vector。第二个是`model的Vector中的数据。为什么会这样?当我向现有表添加内容时,文件行也会显示更改。

4

1 回答 1

2

看看你是如何创建数据的:

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>>();
}

我的建议使代码更健壮:

  • 不要使用data字段。它没有用,因为数据已经包含在模型中。因此,要获取数据,您只需要从模型中获取数据。
  • 要么让你的所有方法都接受参数并返回值,要么不接受任何东西,返回 void 并初始化字段,但将两者混合会令人困惑。上面的方法初始化一个字段返回它,但是else子句只返回它而不初始化它。
于 2013-03-24T18:41:04.527 回答