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

Bob*_*r02 3 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));
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Rob*_*bin 8

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

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

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

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

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