gpt4 book ai didi

JavaFX:ListChangeListener 中的每个更改是否都有单一类型的更改

转载 作者:行者123 更新时间:2023-11-30 02:15:12 26 4
gpt4 key购买 nike

只是想知道 ListChangeListener 中的每个 Change 对象是否只包含单一类型的更改。

while (c.next() {
if (c.wasAdded()) {
}
if (c.wasRemoved()) {
}
if (c.wasUpdated()) {
}
if (c.wasPermutated()) {
}
if (c.wasReplaced()) {
}
}

while (c.next() {
if (c.wasAdded()) {
}
else if (c.wasRemoved()) {
}
else if (c.wasUpdated()) {
}
else if (c.wasPermutated()) {
}
else if (c.wasReplaced()) {
}
}

两者之间有什么区别吗?哪种是首选方式?

最佳答案

ListChangeListener.Change 可以包含更改类型的任意组合。有 3 组相互排斥的状态:

  1. 排列变化
  2. 添加/删除/替换更改
  3. 更新更改

您可以使用ListChangeListener.Change.next()迭代这些状态。这些更改发生的顺序与上面的列表相同:首先遍历所有排列更改,然后遍历添加/删除/替换更改,最后遍历更新更改。

这意味着您可以使用如下代码:

while (c.next()) {
if (c.wasReplaced()) {
// ...
} else if (c.wasAdded()) {
// ...
} else if (c.wasRemoved()) {
// ...
} else if (c.wasPermutated()) {
// ...
} else if (c.wasUpdated()) {
// ...
}
}

只要替换更改的检查发生在添加和删除的检查之前,您就可以重新排序 if/else if 中的检查,因为替换更改意味着 wasRemovedwasAdded 都产生 true。 (第二个代码片段中的情况并非如此。)

或者,如果您不需要区分添加、删除和替换:

while (c.next()) {
if (c.wasPermutated()) {
// ...
} else if (c.wasUpdated()) {
// ...
} else {
// Handle add/remove/replace change
}
}

关于JavaFX:ListChangeListener 中的每个更改是否都有单一类型的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760651/

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