我的另一个问题。不知道我是不是太笨了,不能正确使用谷歌,但我找不到这个答案:
我有两个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中的相应对象绑定?
答案 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