JavaFX侦听器检查布尔值

时间:2016-06-13 09:06:32

标签: java javafx properties boolean bind

我有一个带有几个按钮的GUI游戏,你按下这些按钮最终完成游戏。

我有以下布尔值来测试:

public boolean complete(){
    if (initvalue==finalvaue)){
        return true;
    }
    else {
        return false;
    }
}

我想创建一个监听器来检查游戏是否完成并向用户打印消息。我想我需要为此创建一个SimpleBooleanProperty才能工作。但是我需要将它绑定到上面的布尔值吗?

最好的方法是什么?

1 个答案:

答案 0 :(得分:5)

您可以拥有一个名为completedProperty的{​​{3}},您可以initvaluePropertyfinalValueProperty来存储游戏的积分,然后您可以简单地绑定值completedProperty喜欢

completedProperty.bind(initValueProperty.isEqualTo(finalValueProperty));

因此你甚至不再需要一种方法。

在示例中,我刚刚放置了Button,在按下时将当前值增加1,并且我使用3个属性来连续检查“游戏”状态。只要completedProperty切换为“true”,就会显示带有“Game Over ”文字的Label

注意:我使用BooleanProperty来存储当前值和最终值,但您可以使用任何IntegerProperty

示例:

public class Main extends Application {

    private IntegerProperty initValueProperty = new SimpleIntegerProperty(0);
    private IntegerProperty finalValueProperty = new SimpleIntegerProperty(10);
    private BooleanProperty completedProperty = new SimpleBooleanProperty();

    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root,400,400);

            Button buttonPlusOne = new Button("+1");
            root.setCenter(buttonPlusOne);

            Text currValueText = new Text();
            currValueText.textProperty().bind(initValueProperty.asString());
            root.setBottom(currValueText);

            // Increment current value
            buttonPlusOne.setOnAction(e -> initValueProperty.set(initValueProperty.get()+1));
            // Bind completed property: initValue equals finalValue
            completedProperty.bind(initValueProperty.isEqualTo(finalValueProperty));

            completedProperty.addListener((observable, oldValue, newValue) -> {
                // Only if completed
                if (newValue) 
                    root.setTop(new Label("Game Over"));
            });

            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

可选(正如Property所述)您甚至可以使用fabian而不是属性来检查已完成状态(在这种情况下,您不需要completedProperty),例如:

BooleanBinding completed = initValueProperty.isEqualTo(finalValueProperty);
completed.addListener((observable, oldValue, newValue) -> {
    // Only if completed
    if (newValue) 
        root.setTop(new Label("Game Over"));
});

首先要了解JavaFX BooleanBinding中的属性。