我有一个表摘自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
派生会在以后出现。这在很大程度上取决于您实际想要做什么...