2017-05-23 5 views
1

ObservableBooleanValueのwhen()条件に第2引数を追加します。引数が1つだけの場合は、 が正しく動作します。その行の問題:JavaでObservableBooleanValueを2つの引数で作成する方法は?

game.winnerProperty().isEqualTo(Square.State.EMPTY) || (GameTimer::isTimeOver==true) 

これはokです:

game.winnerProperty().isEqualTo(Square.State.EMPTY) //This is BooleanBinding 

コード:

playerLabel.textProperty().bind(
    Bindings.when(
     game.gameOverProperty().not() 
    ) 
     .then("Actual Player: ") 
     .otherwise(
      Bindings.when(
       game.winnerProperty().isEqualTo(Square.State.EMPTY) || (GameTimer::isTimeOver==true) 
      ) 
       .then("Draw") 
       .otherwise("Winner: ") 
     ) 
); 

タイプはboolean型である第二引数を追加する方法は?

+1

'(GameTimer :: isTimeOver == true)を' ???なぜメソッドリファレンスが 'boolean 'に等しいのでしょうか?これは、これが何のために使用されるのだろうか? – fabian

+0

これは 'isTimeOver'もプロパティですか?または単にフィールドですか? –

+0

@ JornVerneeそれはメソッドでなければならないでしょう。それはメソッド参照の構文なので、メソッド参照を持つことは絶対に意味がありません。 –

答えて

1

あなたはorへの引数はここにする必要がある

game.winnerProperty().isEqualTo(Square.State.EMPTY).or(/* whatever you actually mean here */); 

行うことができます別のObservableBooleanValue(例えばBooleanProperty):私は本当にあなたが現在持っている方法を参照することにより意図されるのか分かりません。

+0

game.winnerProperty()。isEqualTo(Square.State.EMPTY).or(GameTimer :: isTimeOver == true) 時刻が終了すると、isTimeOverはTRUEに設定されます。 isTimeOverをboolean型に変更するには? – user3455638

+1

@ user3455638 'GameTimer :: isTimeOver'の意味を知っている人は誰もいません。 –

2

複数のバインディングを組み合わせると便利なことがあります。

しかし、これは複雑なコードにつながり、理解しにくい/保守しにくいものになります。 Bindings.createStringBindingを使用して、適切な依存関係を追加することが容易になるだろう:

playerLabel.textProperty().bind(
    Bindings.createStringBinding(() -> { 
      if (game.isGameOver()) { 
       return Square.State.EMPTY.equals(game.getWinner()) || gameTimer.isTimeOver() 
           ? "Draw" 
           : "Winner: "; 
      } else { 
       return "Actual Player: "; 
      } 
     }, 
     game.gameOverProperty(), 
     game.winnerProperty(), 
     gameTimer.timeOverProperty())); 
関連する問題