Java Swing - 通知GUI有关模型的更改

时间:2012-08-07 11:48:43

标签: java swing jtable jcombobox tablemodel

我在JTable中有一个列绑定到业务对象列表上的底层布尔属性。我还有一个组合框,应该选择应该选择哪些项目。我基本上将以下代码添加为组合框的处理程序:

            macroCombo.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    JComboBox comboBox = (JComboBox) e.getSource();
                    Predicate filter = (Predicate) comboBox.getSelectedItem();
                    for(SelectableKey key : tableEntries){
                        key.setSelected(filter.evaluate(key));
                    }
                }
            });

我还想根据值更改一些其他控件。目前,表中只有少数单元格会更改其状态以进行选择/取消选择。只有当我单击该行或选择多行时,UI才会自行更新。是否有来自我需要做的处理程序的调用来告诉GUI重绘自己? ALOS,如果我修改其他控件而不是JTable,我怎么告诉他们改变他们的状态呢?

由于

1 个答案:

答案 0 :(得分:8)

当您更新TableModel中的值时,模型应触发相应的TableModelEvent(类型:UPDATE)。

如果您的TableModel例如从AbstractTableModel延伸,则可以在进行更改后调用fireTableRowsUpdated方法。

另一种方法是TableModel,它知道何时更新(例如通过向其包含的对象添加侦听器)。这允许其他代码在不了解TableModel的情况下简单地更新TableModel中包含的对象。 TableModel本身会在检测到对其包含的对象所做的更改时触发事件。

我更喜欢第二种方法,因为这避免了我必须将TableModel传递给我所有其他类。

有关详细信息,请参阅table tutorial

相关问题