我是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
的列表实现。
答案 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");