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之外的其他控件,我怎么告诉他们改变他们的状态?
谢谢
当您更新您的值时TableModel,模型应该触发相应的TableModelEvent(类型:) UPDATE.
如果您TableModel的示例扩展自AbstractTableModel,则可以fireTableRowsUpdated在进行更改后调用该方法.
另一种方法是TableModel知道何时更新(例如通过向其包含的对象添加侦听器).这允许其他代码简单地更新包含在其中的对象TableModel,而不需要知道TableModel.在TableModel随后本身将触发事件,当它检测到它包含的对象所做的更改.
我更喜欢第二种方法,因为这避免了我必须将它传递TableModel给我所有其他类.
有关更多信息,请参阅表格教程.