ObjectPropertyBasenewValue == 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()valueprivate,因此我无法正确覆盖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/

10-10 08:14