当前位置: 首页 > 知识库问答 >
问题:

ChangeListener ObservableMap“oldValue”是newValue的副本

漆雕修能
2023-03-14

问题:为什么用“oldValue”调用ChangeListener ObservableMap是NewValue的副本?


    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();

        }
    }

输出:

ObservableMapExample
changed 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}]

共有1个答案

壤驷鸿祯
2023-03-14

因为值本身不变,所以它与添加键值对之前设置的SimpleMapProperty相同。

如果您逐步查看代码,您将在com.sun.javafx.binding.MapExpressionHelper中找到这段代码

@Override
protected void fireValueChangedEvent(MapChangeListener.Change<? extends K, ? extends V> change) {
    listener.changed(observable, currentValue, currentValue);
}

ChangeListener只能通知您映射发生了更改,但它不能告诉您更改了什么,因为值就是映射。

 类似资料:
  • 问题:为什么用“oldValue”调用ChangeListener ObservableMap是newValue的副本? 输出:

  • 本文向大家介绍深入理解vue.js中$watch的oldvalue与newValue,包括了深入理解vue.js中$watch的oldvalue与newValue的使用技巧和注意事项,需要的朋友参考一下 $watch中的oldvalue和newValue 大家都知道,在vue.js中给我们提供了$watch的方法来做对象变化的监听,而且在callback中会返回两个对象,分别是oldValue和n

  • 跳过值无效时: 问题:和是,因此无法正确重写。 问题:如何获得不执行检查的类型? 这个问题和这个问题有关。

  • 我不懂pyplot。子地块(330 1 i)

  • 本文向大家介绍ElasticSearch中的副本是什么?相关面试题,主要包含被问及ElasticSearch中的副本是什么?时的应答技巧和注意事项,需要的朋友参考一下 一个索引被分解成碎片以便于分发和扩展。副本是分片的副本。一个节点是一个属于一个集群的ElasticSearch的运行实例。一个集群由一个或多个共享相同集群名称的节点组成。

  • 在过去,我们被明确警告调用是异步的,并且的值在回调或下一个方法之前无效。 使用useState,在显式更新状态后如何获取状态值? 钩子是如何工作的?据我所知,的setter函数不接受回调,例如。 不会导致正在运行回调。 我在旧世界的另一个解决方法是在类上挂起一个实例变量,但这在这里不起作用,因为没有可重用的函数实例(在严格模式下没有)。