【问题标题】:How to bind a value to an ObservableList's size?如何将值绑定到 ObservableList 的大小?
【发布时间】:2015-10-14 05:05:12
【问题描述】:

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

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

【问题讨论】:

    标签: java javafx javafx-bindings


    【解决方案1】:

    它们可以与Bindings 类绑定:

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

    【讨论】:

      【解决方案2】:

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

      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/…
      • @GOXR3PLUS 你可能永远不会在代码中看到ListExpression,因为它的级别非常低,很少有人需要直接使用它。另一方面,SimpleListPropertyReadOnlyListWrapper 开箱即用非常有用。
      • 已经将其添加到代码中 :) 。我需要将 ScrollBar 的最大值绑定到 Observable List - 1 的大小
      • @GOXR3PLUS SimpleListProperty 就足够了。
      猜你喜欢
      • 2014-08-06
      • 2016-10-14
      • 2019-01-18
      • 2018-01-11
      • 2012-01-27
      • 2019-12-25
      • 1970-01-01
      • 2012-11-27
      • 2012-01-13
      相关资源
      最近更新 更多