3

我在 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 以外的其他控件,我将如何告诉他们更改其状态?

谢谢

4

1 回答 1

8

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

如果您TableModel的示例从 扩展,您可以在进行更改后AbstractTableModel调用该方法。fireTableRowsUpdated

另一种方法是TableModel知道何时更新(例如,通过将侦听器添加到它包含的对象)。这允许其他代码简单地更新 中包含的对象TableModel,而无需了解TableModel. 然后TableModel,当它检测到对其包含的对象所做的更改时,它本身将触发该事件。

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

有关更多信息,请参阅表格教程

于 2012-08-07T11:59:50.070 回答