2015-07-23 1 views

risposta

12

Essi possono essere legati con la classe Bindings:

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

La risposta accettata è corretta. Fornirò ulteriori informazioni a beneficio dei lettori interessati.

ObservableList è un'interfaccia e come tale non contiene una proprietà size. ListExpression è una classe astratta attuazione ObservableList e aggiungendo ReadOnlyIntegerProperty size e ReadOnlyBooleanProperty empty proprietà. Questa classe è la classe base per un intero albero ereditario delle classi delle proprietà dell'elenco.

maggior parte degli utenti non vorranno sottoclasse le classi astratte nell'albero stessi, quindi vedremo l'attuazione concreta condizione:

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

SimpleListProperty è, come suggerisce il nome, una semplice proprietà lista - un ObservableList avvolto in un Property. È il parallelo degli altri SimpleXxxProperty s. Ha anche una sottoclasse ReadOnlyListWrapper per gestire i requisiti di sola lettura e di lettura e scrittura. Esso può essere costruito da un ObservableList:

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

Gli utenti che hanno bisogno i benefici da questa classe (oltre usando solo ObservableList) e decidono di usarlo non è necessario l'approccio statico Bindings#size.

+1

Ottima risposta !! La prima volta che ho visto 'ListExpression' https://docs.oracle.com/javase/8/javafx/api/javafx/beans/binding/ListExpression.html – GOXR3PLUS

+0

@ GOXR3PLUS Probabilmente non vedrai mai' ListExpression' nel codice dato che è livello molto basso e pochi dovranno usarlo direttamente. 'SimpleListProperty' e' ReadOnlyListWrapper', d'altra parte, sono piuttosto utili immediatamente. – user1803551

+0

Già aggiunto nel codice :). Ho bisogno di legare il valore massimo di una barra di scorrimento alla dimensione di un 'elenco osservabile - 1' – GOXR3PLUS