2016-12-22 8 views
0

ボタンの無効なプロパティを2つのオブザーバブルにバインドしようとしています。
1.特定のテーブルに選択されているデータがない場合
2.同じテーブルに複数のデータが選択されている場合。JavaFX 8:ブール値をObservableBooleanValueまたはBooleanBindingにキャストする方法はありますか?

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

'Bindings.andは' 私はこれを実行することができず、次のエラーを与えている:
タイプの方法と(ObservableBooleanValue、ObservableBooleanValue)のようなものをやって

バインディングは引数(BooleanBinding、ブール値)には適用されません

私は私が

のような第二の条件をキャストしようとしていることが2 BooleanBindingsので、できることを知っています
(BooleanBinding) myTable.getSelectionModel().getSelectedItems().size() > 1 

または

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

との両方が同様に制限されています。

ありがとうございます!

答えて

2

このようなことができない理由は、booleanがプリミティブな値だからです。オブザーバブルにキャストするだけでは、基になる値が変わったときを知る手段がないためです。

基本的な値が変更されるたびに更新されるバインディングを作成する必要があります。幸運にも、Bindingsクラスには便利な方法があります。あなたのケースでは、あなたはそれが1以上であるかどうかをチェックし、観察整数にObservableListを変換する必要があります:

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

これはあなたを与えるだろう、値が選択された1つの以上のアイテムがあるかどうかを反映してBooleanBinding

選択肢が空白の場合は、選択したアイテムが全くないことを意味します。条件が相互に排他的であるため、orを意味している可能性があります。andではないと思われます。

+0

あなたの答えをありがとう!私はそれを使って遊んでいて、それを解決することができました:suiteSelectedMoveDown.disableProperty()\t \t .bind(Bindings.notEqual(Bindings.size(suiteCasesSelected.getSelectionModel()。getSelectedItems())、1));あなたの方がずっと簡単です。そこに行方不明 ')'があります。また、悲しいことに、依頼人の不足のため投票できません。 :( ありがとう、結構です! :) – iamkenos

関連する問題