从多个对象共享/更新JTable?

时间:2016-12-10 00:06:10

标签: java swing jtable

我正在为我的并发编程类开发一个项目,并且遇到了JTable的一些问题。该项目模拟了一个充满港口的世界,每个港口都有人员可以完成工作(在线程中)。我的目标是让GUI在任何给定时间显示每个端口的每个技能的人数,并在人们变得可用/忙时更新。

我在GUI类中创建了一个JTable和一个DefaultTableModel(带有列名),然后将模型传递给每个端口的构造函数。然后,端口基于包含端口名称的数组和基于技能的工作者数量的值向模型添加行。随着人们的变化,我更新数组并触发一个事件,在GUI类中捕获(这确实被捕获),我试图通过重置模型来更新表,但无济于事。

GUI类:

private DefaultTableModel tableModel = new DefaultTableModel(JOBS, 0);
private JTable table = new JTable(tableModel);
...
public void tableChanged(TableModelEvent e){
    table.setModel(tableModel);
}

港口类:

public SeaPort(Scanner scan, DefaultTableModel mod) { //mod is the tableModel
    super(scan);
    model = mod;
    updatePoolData();
    model.addRow(poolData);
}

private void updatePoolData(){
    poolData[0] = this.name;
    synchronized(availability){
        for(int i=1; i<16;i++){
            poolData[i] = availability[i][0];
        }
    }
    model.fireTableDataChanged();
}

在创建端口时,行会被适当添加,正如我所提到的,每次调用该方法时,TableModelEvent都会进入GUI,所以我不知道为什么表格单元格保持为0(我检查了poolData数组,它正在更新它应该)。我已经尝试过其他帖子中的建议(没有创建我自己的表模型,但我认为这不会解决这个因为事件正在解决)而没有运气。

注意:我不需要使用JTable来实现这一点我只是想尝试一些新的东西,所以这不是作弊而且我最终可能会做其他事情。我只是想知道为什么这不起作用。

0 个答案:

没有答案