gpt4 book ai didi

Java Swing - 使用 AbstractTableModel() 从表中删除行

转载 作者:行者123 更新时间:2023-11-30 07:36:35 27 4
gpt4 key购买 nike

我有一张来自 AbstractTableModel 的 table 。表中的数据存储在一个 Vector 中。现在,当我删除一行时,我成功地从 vector 中删除了它,但这并没有在 View 中更新,即在 GUI 中。

我在别处读到我需要使用 fireTableRowsDeleted(),我正试图在我的 AbstractTableModel 的包装器方法中调用它:

dataModel = new AbstractTableModel() {
public void removeAl() {
fireTableRowsDeleted(0, getRowCount()-1);
}
};

但是,我无法访问此 removeAl。我不能在任何地方这样调用它:dataModel.removeAl()

能否请您帮助我了解出了什么问题?如何在删除行时更新 GUI?

编辑:事实证明,问题出在别处。一旦我解决了这个问题,从 Vector 本身删除行开始更新 GUI。 :)

最佳答案

除了 mdma 所说的,你还需要从 TableModel 接口(interface)覆盖以下方法(它们未被 AbstractTableModel 实现),因此你无法实例化任何 AbstractTableModel 子类,除非它确实覆盖了这些方法:

public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

最后,仅在您的 removeAll() 方法中触发 tableRowsDeleted 是不够的,您需要对前 3 个方法返回的内容产生影响;即在 removeAll() 被调用后,你应该确保 getRowCount() 返回 0,否则你会遇到问题(NullPointerException 或等价物在最坏的情况下,JTable 在最好的情况下刷新问题)!

也许你最好在第一步中使用 DefaultTableModel,这可能会让你更容易。派生自 AbstractTableModel 会稍后出现。这在很大程度上取决于您实际上想做什么...

关于Java Swing - 使用 AbstractTableModel() 从表中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473026/

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