gpt4 book ai didi

java - 当我充电 myScrollPane.getViewport() 时,addTableModelListener 不执行任何操作

转载 作者:行者123 更新时间:2023-12-02 05:35:43 26 4
gpt4 key购买 nike

加载应用程序时,我加载 JScrollPane(带有 JTable)。我有一个 TableModelListener 来在表更改时保存更改。

    table.getModel().addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent evt) {
// UPDATE SQL into MDB
}
});

更新到 MDB 工作正常。

所以,我也有一个 JTextField 和一个 Jbutton。当我写入日期并单击 Jtable 时,仅显示 MDB 中的新记录。

    myButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
myScroll.getViewport().remove(table); // Remove old table
// New SQL sentence
table = new JTable(data, columnNames);
myScroll.getViewport().add(table); // Load new table

}
});

然后,就可以正常工作了。 Jtable 仅显示来自 MDB 的匹配记录。但在这一点上,我解释了我的问题。

用于在表更改时保存更改的 TableModelListener 不再起作用。仅适用于初始 JTable,但不适用于新 JTable。

我做错了什么?

最佳答案

TableModelListener to save changes when table changed no longer works. Only works with the initial JTable, but doesn't works with new JTable.

是的,因为您创建了一个新的 JTable在这一行中:

@Override
public void actionPerformed(ActionEvent e) {
...
table = new JTable(data, columnNames); // <-- here
...
}

因此出现一个新的 TableModel创建后,您的监听器不会附加到这个新监听器,而是附加到前一个监听器。

恕我直言,每次按下按钮时,您都应该重新考虑重新创建JTable。一般来说,表(及其模型)仅创建一次,然后开发人员可以添加/删除/更新表模型。

仔细阅读表模型部分,从 Creating a Table Model 开始,共 How to Use Tables教程。

关于java - 当我充电 myScrollPane.getViewport() 时,addTableModelListener 不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24992469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com