2014-06-16 6 views
7

Ho un e desidero associare la proprietà disable di un Button con la dimensione del modello ObservableList della tabella. In particolare, desidero disattivare il pulsante quando la dimensione di ObservableList è maggiore di 2.JavaFX: bind disabilitare la proprietà di un pulsante per la dimensione ObservableList

Come posso ottenere ciò?

Per disattivare un altro pulsante quando viene selezionata nessuna riga nella tabella che ho usato

editRoadButton.disableProperty().bind(roadsTable.getSelectionModel().selectedItemProperty().isNull()); 

C'è un modo simile?

risposta

14

Ci sono metodi di fabbrica per attacchi utili nella classe Binding. Nel tuo caso f.i .:

button.disableProperty().bind(Bindings.size(items).greaterThan(2)); 
2

si può fare qualcosa di simile

ListProperty<String> list = new SimpleListProperty<>(FXCollections.<String>emptyObservableList()); 
Button foo = new Button(); 

foo.disableProperty().bind(new BooleanBinding() { 
    { 
     bind(list); 
    } 

    @Override 
    protected boolean computeValue() { 
     return list.size() > 2; 
    } 
}); 
+0

Questa è una soluzione funzionante. – Giorgio

+0

E per quanto riguarda le perdite di memoria? Devo chiamare unbind? Dove? – Giorgio

+0

Personnaly Eseguo i miei binding su un metodo configure() e mi scollego di tutto sul metodo unconfigure(). Dipende da come è stato fatto il tuo programma, ma i miei unconfigure sono chiamati quando ho cambiato la vista in un'altra. È lo stesso se aggiungi listner, devi rimuoverli –