我有一个表摘自AbstractTableModel。表中的数据存储在向量中。
现在,当我删除一行时,我已经成功将其从向量中删除了,但是在视图中(即在GUI中)并没有得到更新。

我在其他地方读到了需要使用fireTableRowsDeleted()的内容,并且试图在AbstractTableModel的包装方法中调用它:

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


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

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

编辑:
事实证明,问题出在其他地方。一旦我解决了这个问题,从Vector本身中删除行就可以开始更新GUI。 :)

最佳答案

除了mdma所说的之外,您还需要从TableModel接口重写以下方法(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派生会在以后出现。这在很大程度上取决于您实际想要做什么...

09-10 14:50