Java 每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

我有一个带有AbstractTableModel的JTable,其中包含ArrayList中的数据。列表中只有几个元素,但对象的属性变化很快(可能每秒100次)

我想它会一直给fire changes带来糟糕的性能

可以使用计时器每1秒触发一次JTable更新吗

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不是线程安全的