Java swing Jtable未使用AbstractTableModel通过fireXXX更新
我的GUI中有一个JTable,我希望动态更新它。 当然,与Jtable相关联的是一个TableModel,在这里我扩展了AbstractTableModel并覆盖了appropiate方法 我的JTable有四种方法: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
- 阿德罗
- CopySelectedRow
- 删除选定的箭头
- 删除所有
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();