2014-08-27 131 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