我有一个带JTable的Swing客户端。
用户可以添加新行,我们的Java代码将新行插入表模型
问题是新行没有显示在JTable中,因为我们的代码也会在tableChanged INSERT事件之后触发tableChanged UDPATE事件。
它们在模型中,但只有在我调整JTable的大小时才显示线条。
这就是发生的事情(所有这些事情都发生在AWT EDT中):
myTableModel.fireTableRowsInserted()
=> mJTable.tableChanged(e) // 1) INSERT event on a sorted table, e.getFirstRow(), e.getLastRow() are correct
=> // Some Swing internal stuff...
=> defaultListSelectionModel.fireValueChanged()
=> myListSelectionListener.valueChanged(ev) // 2) Our ListSelectionListener is informed. The listener implementation now needs to update a row.
=> myTableModel.fireTableRowsUpdated() // 3) A row is from our TableModel is updated
=> mJTable.tableChanged(e) // 4) UPDATE on a sorted table, e.getFirstRow(), e.getLastRow() are correct
我发现3)中的后续UPDATE现在阻止JTable立即重新绘制并显示新行。
如果我阻止步骤3),则会立即绘制新线条。
任何想法为什么会如此?是否有必要在INSERT事件后主动避免UPDATE?
谢谢, 扬