JavaFX属性删除侦听器不起作用
发布时间:2020-12-15 04:34:32 所属栏目:Java 来源:网络整理
导读:我尝试添加,删除并再次添加一个 JavaFx BooleanProperty的监听器,但它不起作用. 这是我的代码 公共类PropListenerTest { BooleanProperty test = new SimpleBooleanProperty(false);public PropListenerTest() { System.out.println("nTest 1tadd the list
我尝试添加,删除并再次添加一个
JavaFx BooleanProperty的监听器,但它不起作用.
这是我的代码 公共类PropListenerTest { BooleanProperty test = new SimpleBooleanProperty(false); public PropListenerTest() { System.out.println("nTest 1tadd the listener"); //NON-NLS test.addListener(this::onChangeTest); test.set(true); test.set(false); System.out.println("nTest 2tremove the listener,but not possible! Why?"); //NON-NLS test.removeListener(this::onChangeTest); test.set(true); test.set(false); System.out.println("nTest 3tAdd the listener again,but now i have two listener but I want only one!"); //NON-NLS test.addListener(this::onChangeTest); test.set(true); test.set(false); } private void onChangeTest(ObservableValue<? extends Boolean> observable,Boolean oldValue,Boolean newValue) { System.out.println("observable = [" + observable + "],oldValue = [" + oldValue + "],newValue = [" + newValue + "]"); //NON-NLS } public static void main(String[] args) { new PropListenerTest(); } 结果如下 Test 1 add the listener observable = [BooleanProperty [value: true]],oldValue = [false],newValue = [true] observable = [BooleanProperty [value: false]],oldValue = [true],newValue = [false] Test 2 remove the listener,but not possible! Why? observable = [BooleanProperty [value: true]],newValue = [false] Test 3 Add the listener again,but now i have two listener but want only one observable = [BooleanProperty [value: true]],newValue = [true] observable = [BooleanProperty [value: true]],newValue = [false] observable = [BooleanProperty [value: false]],newValue = [false] 我认为在测试2中应该没有结果,在测试3中它应该显示与测试1中相同的结果. 谢谢 解决方法
方法引用将表现为每次都创建一个不同的对象.
想象一下 ChangeListener<Boolean> changeListener1 = new ChangeListener() { @Override public void changed(Observable<? extends Boolean> obs,Boolean newValue) { } }; ChangeListener<Boolean> changeListener2 = new ChangeListener() { @Override public void changed(Observable<? extends Boolean> obs,Boolean newValue) { } }; 然后changeListener1 == changeListener2和changeListener1.equals(changeListener2)将为false. 同样的, ChangeListener<Boolean> changeListener1 = this::onChangeTest ; ChangeListener<Boolean> changeListener2 = this::onChangeTest ; 也会导致changeListener1 == changeListener2为false. 如果你这样做 ChangeListener<Boolean> changeListener = this::onChangeTest ; System.out.println("nTest 1tadd the listener"); //NON-NLS test.addListener(changeListener); test.set(true); test.set(false); System.out.println("nTest 2tremove the listener,but not possible! Why?"); //NON-NLS test.removeListener(changeListener); test.set(true); test.set(false); System.out.println("nTest 3tAdd the listener again,but now i have two listener but I want only one!"); //NON-NLS test.addListener(changeListener); test.set(true); test.set(false); 它会表现得像你期望的那样. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |