Java 每1秒使用模型中的更改更新jtable
我有一个带有AbstractTableModel的JTable,其中包含ArrayList中的数据。列表中只有几个元素,但对象的属性变化很快(可能每秒100次) 我想它会一直给fire changes带来糟糕的性能 可以使用计时器每1秒触发一次JTable更新吗Java 每1秒使用模型中的更改更新jtable,java,swing,user-interface,timer,jtable,Java,Swing,User Interface,Timer,Jtable,我有一个带有AbstractTableModel的JTable,其中包含ArrayList中的数据。列表中只有几个元素,但对象的属性变化很快(可能每秒100次) 我想它会一直给fire changes带来糟糕的性能 可以使用计时器每1秒触发一次JTable更新吗 Timer timer = new Timer(1000, new ActionListener() { @Override public void actionPerfo
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
myModel.fireTableChanged(new TableModelEvent(myModel));
}
});
timer.start();
使用一个。您可以在执行
doInBackground()
、publish()
临时结果和process()
对上的TableModel
更改时收集数据。可以看到一个完整的示例。TableChanged
不是一个好主意,因为它会影响当前选择和列信息,包括渲染器和编辑器。您也不应该从模型上下文之外调用事件触发器(fireXxx
),因为这不是您的责任。例如,使用一个或多个更新方法创建一个自定义表,这些更新方法会触发表行超日期
。另一种解决方案可能是允许模型实际执行其工作,而不是直接从正在更改的数组列表中读取数据,这可能会导致ArrayList
和UI之间出现争用情况,请使用DefaultTableModel
,只需调用setValueAt
(如果为空,addRow
),确保在更新ArrayList
和事件调度线程之间同步更新。这听起来很麻烦。在.NETWPF和MVVM中,我可以创建一个带有PropertyChanged事件的模型,当另一个线程更改模型时,该事件将使GUI更新。这是完全线程安全的。Swing不是线程安全的