2015-04-05 53 views
1

我想觸發一些代碼,當一個名爲EventShowable的對象已在observableList中修改時。 這是我的代碼。Java ListChangeListener WasUpdated()不起作用

   mainApp.getCalendars().get(i).getListEvents().addListener(new ListChangeListener<EventShowable>() { 
       @Override 
       public void onChanged(ListChangeListener.Change<? extends EventShowable> c) { 
        while (c.next()) { 
         if (c.wasUpdated()) { 
          //this doesn't work. 
          //perform updated 

         } 
         if (c.wasAdded()){ 
          //perform something } 

wasAdded()執行得很好,但不是wasUpdate()。 如何獲取某個EventShowable被修改後的工作?由於

P.S:在JavaDoc: 公共布爾wasUpdated() 表示GETFROM()(含)到會過()獨家之間的要素髮生了變化。 這是唯一可選的事件類型,可能不會被所有ObservableLists觸發。 https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ListChangeListener.Change.html#wasUpdated--

回答

1

使用extractor創建清單。

你還沒有真正給予足夠的細節來給出一個完整的答案,但如果你的EventShowable這樣的屬性定義爲

public class EventShowable { 
    public IntegerProperty xProperty() { ... } 
    public StringProperty yProperty() { ... } 
    // ... 
} 

然後創建時xy改變你

將觸發更新事件的列表
ObservableList<EventShowable> listEvents = 
    FXCollections.observableArrayList(eventShowable -> 
     new Observable[] { eventShowable.xProperty(), eventShowable.yProperty() }); 
+0

謝謝,我的EventShowable只包含屬性。但我必須把ObservableList listEvents = ...的代碼放在哪裏?在我的EventShowable類中或在c.wasAdded()附近的代碼中?我不明白這段代碼是做什麼的。 – 2015-04-06 00:03:30