我在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,我怎么告诉他们改变他们的状态呢?
由于
答案 0 :(得分:8)
当您更新TableModel
中的值时,模型应触发相应的TableModelEvent
(类型:UPDATE
)。
如果您的TableModel
例如从AbstractTableModel
延伸,则可以在进行更改后调用fireTableRowsUpdated
方法。
另一种方法是TableModel
,它知道何时更新(例如通过向其包含的对象添加侦听器)。这允许其他代码在不了解TableModel
的情况下简单地更新TableModel
中包含的对象。 TableModel
本身会在检测到对其包含的对象所做的更改时触发事件。
我更喜欢第二种方法,因为这避免了我必须将TableModel
传递给我所有其他类。
有关详细信息,请参阅table tutorial。