Java 如何使绑定的JTable保持最新?
我使用绑定JTable来显示实体列表Java 如何使绑定的JTable保持最新?,java,binding,refresh,jtable,Java,Binding,Refresh,Jtable,我使用绑定JTable来显示实体列表 // selSteps is a List of entities. selStepsBound = ObservableCollections.observableList(selSteps); JTableBinding jTableBinding = SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.R
// selSteps is a List of entities.
selStepsBound = ObservableCollections.observableList(selSteps);
JTableBinding jTableBinding = SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, selStepsBound, tblSelSteps, "tblSelStepsBinding");
ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${steporder}"));
columnBinding.setColumnName("Order");
columnBinding.setColumnClass(Integer.class);
columnBinding.setEditable(false);
columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${name}"));
columnBinding.setColumnName("Description");
columnBinding.setColumnClass(String.class);
bindingGroup.addBinding(jTableBinding);
jTableBinding.bind();
bindingGroup.bind();
这可以很好地显示原始数据。我甚至可以从绑定的observableList中删除项目,并自动更新JTable UI
问题是,当我更改实体的属性值时,该值不会反映在JTable UI中
如何将更改通知JTable?我对SwingBindings的内容不太熟悉,但似乎您的列表是可观察的(即,将通知侦听器更改),但您的实体不是。所以没有人在听你的实体的变化 我通常通知JTable其中一个实体发生更改的方式是从表的模型中触发TableModelEvent。这就是JTable为更新自身而监听的内容。我通常从ABstractTableModel进行扩展,这样我就可以调用fireTableCellUpdated(row,col)等漂亮的函数。但是,我不太确定这个策略如何与SwingBindings的东西相结合……您需要向实体添加“属性更改支持”。所以添加一个成员变量
final private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
方法
public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
然后在每个setter中,添加一行类似于此的内容
changeSupport.firePropertyChange("myProperty", oldMyProperty, myProperty);
e、 g。
公共void setTotalWeight(整数totalWeight){
Integer oldTotalWeight = this.totalWeight;
this.totalWeight = totalWeight;
changeSupport.firePropertyChange("totalWeight", oldTotalWeight, totalWeight);
}