gpt4 book ai didi

javafx - ListChangeListener.Change : how to properly handle updated and permutated items

转载 作者:行者123 更新时间:2023-12-04 12:12:11 27 4
gpt4 key购买 nike

来自 JavaDoc:

ObservableList theList = ...;

theList.addListener(new ListChangeListener<Item>() {
public void onChanged(Change<tem> 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 (Item remitem : c.getRemoved()) {
remitem.remove(Outer.this);
}
for (Item additem : c.getAddedSubList()) {
additem.add(Outer.this);
}
}
}
}
});
}

添加和删​​除项目很简单,但是 //update item 呢?和 // permutate ?

我如何知道哪些项目已被哪些其他项目置换?

更新具体是什么意思?它只是再次将相同的项目添加到列表中吗?

还有呢
for (Item remitem : c.getRemoved()) {
remitem.remove(Outer.this);
}
or (Item additem : c.getAddedSubList()) {
additem.add(Outer.this);
}

什么 Outer.this意思?

最佳答案

How do I know which items have been permutated by which other items?



更改具有 getPermutation()描述元素如何排列的方法。

What does update mean exactly?



如果属于元素的属性发生更改,则更新列表,尽管相同的元素仍保留在列表中(以相同的顺序)。例如,给定一个类
public class Item {

private final IntegerProperty value = new SimpleIntegerProperty();

public final IntegerProperty valueProperty() {
return value ;
}

public final int getValue() {
return valueProperty().get();
}

public final void setValue(int value) {
valueProperty().set(value);
}

public Item(int value) {
setValue(value);
}
}

调用 setValue()在列表的元素上可能会触发更新。请注意 documentation声明更新是“可选的”并且可能不会被所有列表触发。具体来说,要获取触发更新的列表,请使用 extractor 创建它。 :
ObservableList<Item> list = FXCollections.observableArrayList(
item -> new Observable[] {item.valueProperty()});

list.addAll(new Item(1), new Item(2), new Item(3));

list.addListener((Change<? extends Item> c) -> {
while (c.next()) {
if (c.wasUpdated()) {
System.out.println("Items from "+c.getFrom()+" to "+c.getTo()+" changed");
}
}
});

list.get(1).setValue(42);

最后一行代码不会更改列表中的哪些元素或它们的顺序,但会更改其中一个元素的属性。因此,此更改将触发更新。

What does Outer.this mean?



它只是对周围类的当前对象的引用(假定其具有类名 Outer );即不是 ListChangeListener 的匿名内部类实现的当前对象.见 What is the difference between Class.this and this in Java (和许多其他人)。我认为文档中代码片段的上下文应该是一个实现 ObservableList 的类。并维护自己的 ObservableList实例(装饰器模式)。它观察列表实例并更新自身以与其保持同步。

关于javafx - ListChangeListener.Change : how to properly handle updated and permutated items,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42134915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com