我希望将一个值绑定到ObservableList
的大小,以知道其大小,并了解它是否具有多个值
private ObservableList<String> strings = FXCollections.observableArrayList();
我希望将一个值绑定到ObservableList
的大小,以知道其大小,并了解它是否具有多个值
private ObservableList<String> strings = FXCollections.observableArrayList();
它们可以使用 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
是一个简单的列表属性 - 一个被包装在Property
中的ObservableList
。它是其他SimpleXxxProperty
的并列属性。它还有一个子类ReadOnlyListWrapper
来处理只读和读写要求。它可以从ObservableList
构造:
SimpleListProperty<String> list = new SimpleListProperty<>(FXCollections.observableArrayList());
IntegerProperty intProperty = new SimpleIntegerProperty();
intProperty.bind(list.sizeProperty());
需要从这个类中获益(而不只是使用 ObservableList)并决定使用它的用户不需要静态 Bindings#size
方法。
ListExpression
https://docs.oracle.com/javase/8/javafx/api/javafx/beans/binding/ListExpression.html - GOXR3PLUSListExpression
,因为它非常低级且很少有人需要直接使用它。另一方面,SimpleListProperty
和ReadOnlyListWrapper
则是开箱即用的非常有用的工具。 - user1803551Observable List - 1
的大小。 - GOXR3PLUSSimpleListProperty
已经足够了。 - user1803551