- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题:为什么使用 newValue 的副本“oldValue”调用 ChangeListener ObservableMap?
import javafx.beans.property.SimpleMapProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableMap; public class ObservableMapExample { SimpleMapProperty map; class MyChangeListener implements ChangeListener> { @Override public void changed(ObservableValue> changed, ObservableMap oldValue, ObservableMap newValue) { System.out.println("changed "+changed+" old:"+oldValue+" new:"+newValue); } } ObservableMapExample() { map = new SimpleMapProperty(); map.setValue(new SimpleMapProperty(FXCollections.observableHashMap())); map.addListener(new MyChangeListener()); map.put("a", "1"); map.put("b", "2"); map.put("b", "3"); } public static void main(String[] args) { System.out.println("ObservableMapExample"); new ObservableMapExample(); } }
输出:
ObservableMapExamplechanged MapProperty [value: MapProperty [value: {a=1}]] old:MapProperty [value: {a=1}] new:MapProperty [value: {a=1}]changed MapProperty [value: MapProperty [value: {a=1, b=2}]] old:MapProperty [value: {a=1, b=2}] new:MapProperty [value: {a=1, b=2}]changed MapProperty [value: MapProperty [value: {a=1, b=3}]] old:MapProperty [value: {a=1, b=3}] new:MapProperty [value: {a=1, b=3}]
最佳答案
由于值本身不会改变,因此它与您在添加键值对之前设置的 SimpleMapProperty
相同。
如果您单步执行代码,您将在 com.sun.javafx.binding.MapExpressionHelper
中找到这段代码:
@Override
protected void fireValueChangedEvent(MapChangeListener.Change<? extends K, ? extends V> change) {
listener.changed(observable, currentValue, currentValue);
}
ChangeListener
只能通知你 map 发生了变化,但它不能告诉你发生了什么变化,因为值就是 map 。
但是,如果您使用新的 SimpleMapProperty
对象再次调用 setValue
,您将看到您的 ChangeListener
确实为 oldValue
和 newValue
获取了不同的对象,因为现在值本身已更改(而不仅仅是修改)。
关于java - ChangeListener ObservableMap "oldValue"是 newValue 的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48835665/
简短:我正在寻找一种方法来更新 ListView 的内容基于对 Map 所做的更改和 map 中的值。 情况: 有“来源”LinkedHashMap在应用程序的逻辑方面。 在 GUI 部分有一个 Li
我使用单例作为 Employee 对象的虚假数据库。 在这个伪数据库中,有一个 ObservableMap,利用员工的社会安全号码作为其唯一 key 。 我有 ComboBox、TableView 和
我正在尝试使用 scala.collection.mutable.ObservableMap。 我抓取了下面的片段 from scala-user并将其复制到 REPL。 电子邮件提到已标记为已修复的
我创建了一个 ObservableMap 和一个只打印它接收到的任何事件的订阅者(取自 here): class MyMap extends HashMap[Int,Int] with Observa
JavaFX 是否有一种绑定(bind)类型,在这种绑定(bind)类型中,我提供一个带有键的可观察映射,并且计算值将始终随着键/值对的变化而更新?从 map 中删除该键将导致 null值,将其加回去
我正在尝试放置一个与我 View 上的监听器链接的 ObservableMap> 。 这是我正在使用的代码: ObservableMap> map = FXCollections.observable
我有 ObservableMap,其中添加了资源文件。 private ObservableMap resourceFilesData; resourceFilesData = new Observa
我有一个使用 ObservableMap 填充的组合。我想要的是,如果在组合中选择一个项目(键),则能够获取相应的对象(值)。这是我到目前为止所拥有的 import java.sql.Prepared
我正在向我的 JavaFX 8 应用程序添加一些加速器,当我尝试清除场景的加速器时,我遇到了 ConcurrentModificationException。让我解释一下,而不是为每个对话框使用一个场
我目前正在开发一个应用程序,该应用程序内部有一个 HashMap,用于存储与字符串关联的创建的任务,声明如下: private Map _tabs = new HashMap(); 它在终端中运行良好
问题:为什么使用 newValue 的副本“oldValue”调用 ChangeListener ObservableMap? import javafx.beans.property.Sim
我以 ObservableMap 的格式获取数据.要在 View 中实现此数据,我需要采用 ObservableList 格式的 map 值。 . 因为我需要 map 集合中的数据(以避免重复和其他原
我的 Java 程序生成大量数据,我用这些数据构造单独的 ResultObject。因为只有某些 ResultsObjects 会令人感兴趣,所以我用我的结果填充 ObservableHashMap<
我是一名优秀的程序员,十分优秀!