2014-06-16 4 views
7

J'ai un TableView et je voudrais lier la propriété désactiver d'un Button avec la taille du modèle ObservableList de la table. En particulier, je voudrais désactiver le bouton lorsque la taille de la ObservableList est supérieure à 2.JavaFX: liaison désactiver la propriété d'un bouton à ObservableList taille

Comment puis-je y parvenir?

Pour désactiver un autre bouton lorsque aucune ligne est sélectionnée dans le tableau I utilisé

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

Y at-il une manière similaire?

Répondre

14

Il existe des méthodes d'usine pour les liaisons utiles dans la classe Liaisons. Dans votre cas f.i .:

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

Vous pouvez faire quelque chose comme ça

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

Ceci est une solution de travail. – Giorgio

+0

Qu'en est-il des fuites de mémoire? Je dois appeler unbind? Où? – Giorgio

+0

Personnellement, je fais mes liaisons sur une méthode configure(), et je délie tout sur la méthode unconfigure(). Cela dépend de la façon dont votre programme est exécuté, mais mes déconfigurations sont appelées lorsque j'ai changé la vue en une autre. C'est la même chose si vous ajoutez un écouteur, vous devez les supprimer –

Questions connexes