2014-08-27 129 views
0

來自我的另一個問題。不知道我是否太愚蠢正確地使用谷歌,但我沒有找到一個答案之一:JavaFX ObservableList綁定到子列表

我有兩個ObservableLists

public static ObservableList<ImageData> datas_all, datas_flickr; 

在datas_flickr所有對象均包含在datas_all(datas_flickr是datas_all子集)。我有一個帶有兩個不同選項卡的GUI。這兩個選項卡都包含TableViews。一個TableView顯示來自datas_all的數據,其他TableView顯示來自datas_flickr的數據。

這兩個選項卡都有一個刪除按鈕,用於刪除在相應的TableView中選擇的對象。現在我想知道是否有任何簡單的方法將datas_flickr中的對象與datas_all中的相應對象綁定在一起?

回答

2

Bidirectional Binding不會工作你的情況,因爲它需要的ObservableList包含相同的數據

您可以通過在datas_flickr

工作示例使用ListChangeListener實現這一

import javafx.collections.FXCollections; 
import javafx.collections.ListChangeListener; 
import javafx.collections.ObservableList; 

public class SubListBinding { 

    public static void main(String[] args) { 
     ObservableList<String> list = FXCollections.observableArrayList(); 
     ObservableList<String> subList = FXCollections.observableArrayList(); 
     list.addAll("a", "b", "c"); 
     subList.addAll("x", "y", "z"); 
     list.addAll(subList); 
     subList.addListener(new ListChangeListener<String>() { 
      public void onChanged(Change<? extends String> c) { 
       while (c.next()) { 
        if (c.wasPermutated()) { 
         for (int i = c.getFrom(); i < c.getTo(); ++i) { 
           //permutate 
         } 
        } else if (c.wasUpdated()) { 
           //update item 
        } else { 
         for (String remitem : c.getRemoved()) { 
          list.remove(remitem); 
         } 
         for (String additem : c.getAddedSubList()) { 
          list.add(additem); 
         } 
        } 
       } 
      } 
     }); 
     System.out.println("Before removal.."); 
     System.out.println("List : " + list); 
     System.out.println("SubList : " + subList); 
     System.out.println("After removal.."); 
     subList.remove("y"); 
     System.out.println("List : " + list); 
     System.out.println("SubList : " + subList); 
    } 

} 

同樣,你可以在datas_all上做同樣的事

+0

謝謝,但我剛剛在30秒前解決了我的問題。 :D對不起 – 2014-08-27 19:16:21