9

我想将一个值绑定到ObservableList的大小以知道它的大小并知道它是否有多个值

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

2 回答 2

24

它们可以与Bindings类绑定:

ObservableList<String> strings = FXCollections.observableArrayList();
IntegerBinding sizeProperty = Bindings.size(strings);
BooleanBinding multipleElemsProperty = new BooleanBinding() {
    @Override protected boolean computeValue() {
        return strings.size() > 1;
    }
};
于 2015-07-23T18:21:28.063 回答
9

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

ObservableList 是一个接口,因此不具有size属性。 是一个实现和 添加 属性ListExpression 的抽象类。此类是列表属性类的整个继承树的基类。ObservableListReadOnlyIntegerProperty sizeReadOnlyBooleanProperty empty

大多数用户不希望自己对树中的抽象类进行子类化,因此我们将查看提供的具体实现:

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

SimpleListProperty 顾名思义,它是一个简单的列表属性——一个ObservableList包裹在Property. 它是其他SimpleXxxPropertys的平行线。它还有一个子类 ReadOnlyListWrapper 来处理只读和读写要求。它可以由 构造ObservableList

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

需要从此类中受益(不仅仅是使用ObservableList)并决定使用它的用户不需要静态Bindings#size方法。

于 2017-02-08T11:46:29.050 回答