- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我写这个时:
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener;
SimpleBooleanProperty foo = new SimpleBooleanProperty();
foo.addListener(
new ChangeListener<Boolean>() {
@Override
public void changed(
ObservableValue<? extends Boolean> observable,
Boolean oldValue, Boolean newValue
) {
System.out.println(oldValue + " " + newValue);
}
}
);
foo.set(false);
foo.set(true);
输出为
false true
但是,如果我将最后两行更改为
foo.set(true);
foo.set(false);
输出为
false true
true false
我发现这相当不一致。如何确保监听器始终在第一次集合
时收到通知?
...或者监听器应该显式调用 foo.get() 来获取初始值,然后仅在更改时收到通知,这是常识吗?在这种情况下,我仍然不知道如何区分默认的 false
和在监听器注册之前设置的 false
。
最佳答案
完全一致。
问题是 SimpleBooleanProperty
已初始化为 false。当您调用foo.set(false)
时首先,值实际上没有改变,所以监听器没有被调用。
当您调用foo.set(true)
时首先,值更改两次(false -> true -> false),这会调用监听器两次。
如果您希望初始值为 true,请使用 the constructor which takes a boolean .
<小时/>如果您想在附加监听器时触发事件,您可以扩展 SimpleBooleanProperty
很容易,尽管我不清楚你将使用什么旧值(null,我猜?):
class FireWhenAttachBooleanProperty extends SimpleBooleanProperty
{
@Override
public void addListener(ChangeListener<? super Boolean> listener)
{
super.addListener(listener);
listener.changed(this, null, getValue());
}
}
关于java - 如何让 SimpleProperty 通知第一组听众?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894298/
在 Java FX 应用程序中使用属性 我开始质疑对属性用法的理解:使用类实例成员 ...Property 与 Simple...Property 的实际区别是什么? public class Foo
当我写这个时: import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ChangeListener
我现在正在使用 Java FX 制作一个游戏,现在我开始添加 gui 元素,这些元素显示下面的游戏模型的数据。我遇到了 TableView,并且所有示例实现都与模型类中的 SimpleProperti
我是一名优秀的程序员,十分优秀!