JavaFX ObservableList绑定到子列表

时间:2014-08-27 18:37:10

标签: data-binding javafx observablecollection

我的另一个问题。不知道我是不是太笨了,不能正确使用谷歌,但我找不到这个答案:

我有两个ObservableLists

    public static ObservableList<ImageData> datas_all, datas_flickr;

datas_flickr中的所有对象都包含在datas_all中(datas_flickr是datas_all的子集)。我有一个带有两个不同选项卡的GUI。两个选项卡都包含TableView。一个TableView显示来自datas_all的数据,而其他TableView显示来自datas_flickr的数据。

两个选项卡都有一个删除按钮,用于删除在相应TableView中选择的对象。现在我想知道是否有任何简单的方法将datas_flickr中的对象与datas_all中的相应对象绑定?

1 个答案:

答案 0 :(得分:3)

Bidirectional Binding不适用于您的情况,因为它需要ObservableList包含相同的数据

您可以使用ListChangeListener

上的datas_flickr来实现此目的

工作样本

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

上执行相同的操作