[英]How to keep bound JTable up to date?
我正在使用綁定的JTable顯示實體列表。
// 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並不是很熟悉,但是似乎您的List是Observable的(即,將通知更改的偵聽器),而您的實體卻不是。 因此,沒有人在聽您實體的變化。
我通常會通知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);
}
然后在每個設置器中,添加與此類似的一行...
changeSupport.firePropertyChange("myProperty", oldMyProperty, myProperty);
例如public void setTotalWeight(Integer totalWeight){
Integer oldTotalWeight = this.totalWeight;
this.totalWeight = totalWeight;
changeSupport.firePropertyChange("totalWeight", oldTotalWeight, totalWeight);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.