如何在Java中使用两个参数创建ObservableBooleanValue?

时间:2017-05-23 18:47:38

标签: java javafx java-8 boolean-logic

我想为ObservableBooleanValue的when()条件添加第二个参数。如果只有一个参数 它工作正常。问题就在那一行:

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

没关系:

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: ")
        )
);

如何添加哪个类型为布尔值的第二个参数?

2 个答案:

答案 0 :(得分: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()));

答案 1 :(得分:1)

你可以做到

CookieCsrfTokenRepository

此处game.winnerProperty().isEqualTo(Square.State.EMPTY).or(/* whatever you actually mean here */); 的参数必须是另一个or(例如ObservableBooleanValue}:我真的不知道您目前拥有的方法参考的目的是什么。