ObjectPropertyBase
在newValue == oldValue
时跳过值无效:
/**
* {@inheritDoc}
*/
@Override
public void set(T newValue) {
if (isBound()) {
throw new java.lang.RuntimeException((getBean() != null && getName() != null ?
getBean().getClass().getSimpleName() + "." + getName() + " : ": "") + "A bound value cannot be set.");
}
if (value != newValue) {
value = newValue;
markInvalid();
}
}
问题:
markInvalid()
和value
是private
,因此我无法正确覆盖set(newValue)
。问题:如何获取不进行
(value != newValue)
检查的类型?此问题与this question有关。
最佳答案
如何获取不进行(value!= newValue)检查的类型?
扩展SimpleObjectProperty
(或ObjectPropertyBase
)并覆盖其set
方法并跳过检查。虽然您不能自己调用markInvalid
,但该方法并不能做很多您不能做的事情:
class InvalidatingObjectProperty<T> extends SimpleObjectProperty<T> {
@Override
public void set(T newValue) {
if (isBound()) {
throw new java.lang.RuntimeException(
(getBean() != null && getName() != null ? getBean().getClass().getSimpleName() + "." + getName() + " : " : "")
+ "A bound value cannot be set.");
}
invalidated();
fireValueChangedEvent();
}
}
我们缺少的是将
valid
设置为false
。但是,唯一重要的地方是其toString
方法,您也可以覆盖该方法。关于java - 即使newValue == oldValue也会触发更改事件的JavaFX ObjectProperty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45116003/