需要Bindings.equals ObservableList

时间:2015-04-16 00:26:58

标签: javafx javafx-8

我是JavaFX Properties和Bindings的新手。所以我要做的是从BooleanBinding获取Bindings.equals()并传递两个ObservableList。我不确定在这里使用什么类型的列表,我需要列表与ListView一起使用。我已经查看了JavaDocs上列表属性的迷宫,但没有任何帮助。

我需要将两个列表绑定到BooleanBinding

BooleanBinding listsEqual = Bindings.equal(list1, list2);

我还需要这两个列表才能在ListView中使用

ListView listView = new ListView();
listView.setItems(list1);

两个不同列表的目的是让一个列表成为当前列表,另一个列表是原始版本,以查看第一个列表是否已更改。这不是很重要,但我知道我需要其中两个。

我的问题是我无法找到同时适用于Bindings.equal()ListView的列表实现。

1 个答案:

答案 0 :(得分:3)

使用

ObservableList<?> list1 = ... ;
ObservableList<?> list2 = ... ;

BooleanBinding listsEqual = Bindings.createBooleanBinding(() -> Objects.equals(list1, list2), 
    list1, list2);

例如:

ListView<String> listView = new ListView<>();
ObservableList<String> list = FXCollections.observableArrayList();
BooleanBinding listsEqual = Bindings.createBooleanBinding(() -> 
    Objects.equals(listView.getItems(), list),
    listView.getItems(), list);
listsEqual.addListener((obs, wereEqual, areNowEqual) -> System.out.println("Lists equal? "+areNowEqual));
System.out.println("Adding to Listview: One");
listView.getItems().add("One");
System.out.println("Adding to list: One");
list.add("One");
System.out.println("Adding to Listview: Two");
listView.getItems().add("Two");
System.out.println("Adding to Listview: Three");
listView.getItems().add("Three");
System.out.println("Adding to list: Two");
list.add("Two");
System.out.println("Adding to list: Three");
list.add("Three");