有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajavafx:是否有允许空值并提供greaterThan和lessThan等方法的整数属性?

在JavaFX中,有一个IntegerProperty类,它继承返回BooleanBinding的方法,如greaterThanlessThan。但是,不允许空值,因为它将值存储为int(因此是单独的IntegerProperty类)

相反,ObjectProperty<Integer>允许空值,但不提供此类方法

有没有一种方法可以同时使用这两种属性:允许空值,同时能够获得比较两个属性的BooleanBinding(或类似的)(例如,可能使用Comparator


共 (1) 个答案

  1. # 1 楼答案

    静态方法^{}Property<Integer>创建一个IntegerProperty,并在它们之间建立一个双向绑定。{cd3}在本例中,它们被视为{cd3}值,在本例中,它们被视为{cd1}

    如果您的案例有效,那么:

    Property<Integer> age = new SimpleObjectProperty<>();
    BooleanBinding canVote = IntegerProperty.integerProperty(age).greaterThanOrEqualTo(18);
    

    否则,仅使用标准API,您需要手动创建绑定:

    Property<Integer> age = new SimpleObjectProperty<>();
    BooleanBinding canVote = Bindings.createBooleanBinding(() -> {
        if (age.get() == null) {
            return false ;
        } else {
            return age.get().intValue() >= 18 ;
        }
    }, age);
    

    另一个选项是使用(或写入…)第三方绑定库。例如,使用ReactFX(JavaFX的反应式编程API,其中包含一些绑定API),您可以

    Property<Integer> age = new SimpleObjectProperty<>();
    Val<Boolean> canVote = Val.map(age, a -> a >= 18);
    

    这里canVote是一个Val<Boolean>Val是一个ObservableValue) 如果age包含null,则为“空”,反之则为truefalse。你能行

    ObservableValue<Boolean> canVote = Val.map(age, a -> a >= 18).orElseConst(false);
    

    如果age包含null,则强制其具有值