2016-12-22 3 views
0

Ich versuche, die deaktivierte Eigenschaft einer Schaltfläche in 2 Observablen zu binden:
1. Wenn für eine bestimmte Tabelle keine Daten ausgewählt sind
2. Wenn in derselben Tabelle mehr als 1 Daten ausgewählt sind.
JavaFX 8: Gibt es eine Möglichkeit, Boolean zu ObservableBooleanValue oder zu einem BooleanBinding zu werfen?

tun so etwas wie:

button.disableProperty().bind(Bindings.and(Bindings.isEmpty(myTable.getSelectionModel().getSelectedItems()), 
    myTable.getSelectionModel().getSelectedItems().size() > 1)); 

'Bindings.and' nicht mir erlaubt, dies zu tun und die folgenden Fehler geben:
" Das Verfahren und (ObservableBooleanValue, ObservableBooleanValue) in der Art Bindungen ist nicht anwendbar für die Argumente (BooleanBinding, boolean) "

ich weiß, dass es 2 BooleanBindings daher erlaubt ich versuche, die zweite Bedingung wie

zu werfen
(BooleanBinding) myTable.getSelectionModel().getSelectedItems().size() > 1 

oder

(ObservableBooleanValue) myTable.getSelectionModel().getSelectedItems().size() > 1 

und beide sind auch eingeschränkt.

Vielen Dank im Voraus!

Antwort

2

Der Grund, warum Sie so etwas nicht tun können, ist, dass ein boolean ein primitiver Wert ist - Sie können ihn nicht einfach auf eine Observable umwandeln, da er nicht wissen kann, wann sich der zugrunde liegende Wert geändert hat.

Sie müssen eine Bindung erstellen, die aktualisiert wird, wenn sich die zugrunde liegenden Werte ändern. Zum Glück hat die Bindings Klasse bequeme Methoden, um damit zu helfen. In Ihrem Fall müssen Sie die ObservableList in eine beobachtbare Integer konvertieren dann prüfen, ob es größer als 1 ist:

Bindings.size(myTable.getSelectionModel().getSelectedItems()).greaterThan(1) 

Dies wird Ihnen ein BooleanBinding, deren Wert zeigt an, ob es mehr als 1 Element ausgewählt ist.

Als Randnotiz - wenn die Auswahl leer ist, bedeutet es, dass es genau null Elemente ausgewählt sind, also denke ich, dass Sie or und nicht and gemeint haben, da sich Ihre Bedingungen gegenseitig ausschließen.

+0

Danke für Ihre Antwort! Ich spielte damit und löste es mit: suiteSelectedMoveDown.disableProperty() \t \t .bind (Bindings.notEqual (Bindings.size (suiteCasesSelected.getSelectionModel(). GetSelectedItems()), 1)); aber deine ist viel einfacher. Vermisst aber ')' zu schließen. Außerdem kann ich leider wegen fehlender Wiederholungen nicht wählen. :(Trotzdem danke! :) – iamkenos

Verwandte Themen