2009-09-14 3 views
0

바인딩 된 JTable을 사용하여 엔티티 목록을 표시하고 있습니다.바운드 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에 어떻게 통지합니까?

답변

0

저는 SwingBindings에 익숙하지 않지만 List가 Observable 일 때 (즉, 청취자에게 변경 사항이 통지 될 때) 엔티티가 아닌 것으로 나타납니다. 아무도 당신의 실체의 변화를 듣고 있지 않습니다.

일반적으로 JTable에 엔티티 중 하나의 변경 사항을 알리는 방법은 테이블 모델에서 TableModelEvent를 시작하는 것입니다. 이것은 JTable이 업데이트를 청취하기위한 것입니다. 일반적으로 FireTableCellUpdated (행, 열) 등의 멋진 함수를 호출 할 수 있도록 ABstractTableModel에서 확장합니다.이 전략이 SwingBindings 항목과 어떻게 혼합 될 수 있는지는 아직 확실하지 않습니다 ...

0

엔티티에 "속성 변경 지원"을 추가하십시오. 그럼

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);   
}