【发布时间】:2015-10-14 05:05:12
【问题描述】:
我想将一个值绑定到ObservableList 的大小以知道它的大小并知道它是否有多个值
private ObservableList<String> strings = FXCollections.observableArrayList();
【问题讨论】:
标签: java javafx javafx-bindings
我想将一个值绑定到ObservableList 的大小以知道它的大小并知道它是否有多个值
private ObservableList<String> strings = FXCollections.observableArrayList();
【问题讨论】:
标签: java javafx javafx-bindings
它们可以与Bindings 类绑定:
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 的抽象类
和
ReadOnlyBooleanProperty 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 方法。
【讨论】:
ListExpressiondocs.oracle.com/javase/8/javafx/api/javafx/beans/binding/…
ListExpression,因为它的级别非常低,很少有人需要直接使用它。另一方面,SimpleListProperty 和 ReadOnlyListWrapper 开箱即用非常有用。
Observable List - 1 的大小
SimpleListProperty 就足够了。