Java swing Jtable未使用AbstractTableModel通过fireXXX更新

Java swing Jtable未使用AbstractTableModel通过fireXXX更新,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,我的GUI中有一个JTable,我希望动态更新它。 当然,与Jtable相关联的是一个TableModel,在这里我扩展了AbstractTableModel并覆盖了appropiate方法 我的JTable有四种方法: 阿德罗 CopySelectedRow 删除选定的箭头 删除所有 当我运行AddRow或CopySelectedRow时,表“落后一次更新”: 如果我按一下newRow,视觉上什么也不会发生 如果我按两次newRow,第一个显示,而第二个不显示 但是,使用deleteSel

我的GUI中有一个JTable,我希望动态更新它。 当然,与Jtable相关联的是一个TableModel,在这里我扩展了AbstractTableModel并覆盖了appropiate方法

我的JTable有四种方法:

  • 阿德罗
  • CopySelectedRow
  • 删除选定的箭头
  • 删除所有
当我运行AddRow或CopySelectedRow时,表“落后一次更新”:

如果我按一下newRow,视觉上什么也不会发生

如果我按两次newRow,第一个显示,而第二个不显示

但是,使用deleteSelected或deleteAll会在我单击时更新表(即不在后面)

提取我的TableModel类:

public class TableModel extends AbstractTableModel {

private List<String[]> data;

public TableModel() {
    data = new ArrayList<String[]>();
}

...

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    data.get(rowIndex)[columnIndex] = aValue.toString();
    fireTableCellUpdated(rowIndex, columnIndex);
}

public void addRow(String[] aValue) {
    data.add(aValue);
    fireTableRowsInserted(data.size()-1, data.size()-1);
}

public void copyRow(int rowIndex) {
    addRow(data.get(rowIndex));
}

public void removeRow(int rowIndex) {
    data.remove(rowIndex);
    fireTableRowsDeleted(rowIndex, rowIndex);
}
编辑:

我之所以选择使用AbstractTableModel,是因为我对DefaultTableModel有同样的问题(每当我添加一行时,直到下一行被“添加”后才添加),而使用AbstractTableModel,我可以自己触发更改事件。然而,它没有解决任何问题。有谁能在这里解释一下我的问题吗?如果有人需要更多的信息,我很乐意详细说明这个案例。

方法

FireTableDataChanged(); 
检测表数据对象中的任何类型的更改并分别更新GUI,您可以尝试这样做,而不是

fireTableRowsInserted();

错误的建议,fireTableDataChanged重新创建模型,您可能会丢失渲染器和渲染器的所有自定义设置editor@mKorbel由于他的代码只显示行中的更改(即Delete/copy/insert),而不显示列中的数据编辑,因此我认为这将很好地工作,因为表的结构(如列的顺序)在本方法中,假设为相同。如果我错了,遗漏了什么,请纠正我。谢谢。你好,哈里斯,谢谢你的回答。不管它是否改变了结构,触发tableDataChanged()而不是insert都不起作用。1。你错了,2。顺便说一句,fireTableRowsInserted();是addRow的适当通知程序,因为新行插入到JTable,3。任何东西都不能从OPs问题中分离出来,否则将得到回答(SSCCE/MCVE,缩写,可运行,可编译,局部变量中XxxTableModel的值为harcoded),因为这个问题中的所有内容都没有完成,只是猜测而已,…我不完全理解你的第三点mKorbel,你能详细说明一下吗?
fireTableRowsInserted();