簡體   English   中英

如何保持JTable的最新狀態?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM