如何将值绑定到 ObservableList 的大小?

How to bind a value to an ObservableList's size?

我想将一个值绑定到 ObservableList 的大小以了解其大小并了解它是否具有多个值

private ObservableList<String> strings = FXCollections.observableArrayList();

它们可以与 Bindings class:

绑定
ObservableList<String> strings = FXCollections.observableArrayList();
IntegerBinding sizeProperty = Bindings.size(strings);
BooleanBinding multipleElemsProperty = new BooleanBinding() {
    @Override protected boolean computeValue() {
        return strings.size() > 1;
    }
};

接受的答案是正确的。为了感兴趣的读者的利益,我将提供更多的见解。

ObservableList 是一个接口,因此不包含 size 属性。 ListExpression 是实现 ObservableList 并添加 ReadOnlyIntegerProperty size 的抽象 class 和 ReadOnlyBooleanProperty empty 特性。此 class 是列表属性 classes.

的整个继承树的基础 class

大多数用户不想子class树中的抽象classes,所以我们将看看提供的具体实现:

ListExpression                    (abstract)
 - ReadOnlyListProperty           (abstract)
    - ListProperty                (abstract)
      - ListPropertyBase          (abstract)
        - SimpleListProperty
          - ReadOnlyListWrapper

SimpleListProperty 顾名思义,它是一个简单的列表 属性 - ObservableList 包裹在 Property 中。它与其他 SimpleXxxProperty 平行。它还有一个子class ReadOnlyListWrapper 处理 read-only 和 read-and-write 要求。它可以从 ObservableList:

构造
SimpleListProperty<String> list = new SimpleListProperty<>(FXCollections.observableArrayList());
IntegerProperty intProperty = new SimpleIntegerProperty();
intProperty.bind(list.sizeProperty());

需要从这个 class 中获益(而不是仅仅使用 ObservableList)并决定使用它的用户不需要静态 Bindings#size 方法。