2013-12-11 71 views
0

我是JavaFX的新手,我在我的視圖tableAtableB上有兩個表。我爲這兩個表做了Change Listeners。他們看起來像下面這樣:如何更改更改監聽器被稱爲javafx

this.tableA.getSelectionModel().selectedItemProperty().addListener 
    (New ChangeListener<Person>() { 
     @Override 
     public void changed(ObservableValue< ? extends Person> observable,Perosn oldValue, Person newValue) { 
      updateButtons("View-A"); 
     } 
}); 

this.tableB.getSelectionModel().selectedItemProperty().addListener 
    (New ChangeListener<Car>() { 
     @Override 
     public void changed(ObservableValue< ? extends Car> observable,Car oldValue, Car newValue) { 
      updateButtons("View-B"); 
     } 
}); 

所以基本上的情況是,用戶從一個TableAPerson它會顯示所有選擇的人有TableBCar對象。然後,他們可以選擇每輛車,並通過不同的按鈕更改某些屬性。 但是我選擇了一輛車後,如果我決定要選擇另一個人。當我從TableA中選擇一個人時,程序仍然會調用TableB更改偵聽器?

回答

1

我期望在您描述的場景中調用兩個偵聽器。當表A中的選擇發生變化時,您將替換表B中顯示的項目。如果先前在表B中選擇了項目,則在該表中選擇的項目在發生時必然會發生更改。 (無論現在選擇什麼,它不是以前選擇的項目,因爲該項目不再位於表格中)。所以我會將此想象爲您想要的行爲,否則在此時UI將處於不一致的狀態。

當您更改表B中顯示的項目,你可能要清除的選擇太:

this.tableA.getSelectionModel().selectedItemProperty().addListener 
    (new ChangeListener<Person>() { 
     @Override 
     public void changed(ObservableValue< ? extends Person> observable,Person oldValue, Person newValue) { 
      // update items shown in table B 
      tableB.getSelectionModel().clearSelection(); 
     } 
}); 

,然後確保你偵聽表B的選擇模型可以在那裏NEWVALUE爲空適當的情況下。