JavaFX按钮单击顺序

时间:2017-01-26 21:21:54

标签: java button javafx

所以我有3个按钮 - 红色,黄色和绿色。用户应按正确的顺序点击它们 - 从红色到绿色。如果发生这种情况,它会说" OK"如果没有,它会说"错误"管他呢。我被卡住了,因为我不知道如何正确获取点击订单。

这就是我现在所拥有的,但它无法正常运作。

@Override
public void start(Stage primaryStage) {

    VBox root = new VBox();

    Button b1 = new Button("Red");
    Button b2 = new Button("Yellow");
    Button b3 = new Button("Green");

    root.getChildren().add(b1);
    root.getChildren().add(b2);
    root.getChildren().add(b3);

    Scene scene = new Scene(root);

    primaryStage.setTitle("Traffic");
    primaryStage.setScene(scene);
    primaryStage.sizeToScene();
    primaryStage.show();

    b1.setOnAction((ActionEvent t) -> {
        b2.setOnAction((ActionEvent t1) -> {
            b3.setOnAction((ActionEvent t2) -> {
                System.out.println("OK");
            });
        });
    });

}

2 个答案:

答案 0 :(得分:1)

制作3个bool变量,每个按钮一个。
例如:redButtonPressed,yellowButtonPressed,greenButtonPressed。
全部初始化为false。

然后,按下红色按钮时,将redButtonPressed设置为true。 按下黄色按钮时:

if (redButtonPressed){
yellowButtonPressed = true;
} else {
print "Wrong!";
}

和绿色按钮,按下时:

if(redButtonPressed && yellowButtonPressed){
print "OK";
} else {
print "Wrong!";
}
打印“错误”后,你应该将所有的bool设置为false。

答案 1 :(得分:1)

只需跟踪下一个按钮:

private Button nextButton ;

@Override
public void start(Stage primaryStage) {

    VBox root = new VBox();

    Button b1 = new Button("Red");
    Button b2 = new Button("Yellow");
    Button b3 = new Button("Green");

    nextButton = b1 ;

    root.getChildren().add(b1);
    root.getChildren().add(b2);
    root.getChildren().add(b3);

    Scene scene = new Scene(root);

    primaryStage.setTitle("Traffic");
    primaryStage.setScene(scene);
    primaryStage.sizeToScene();
    primaryStage.show();

    b1.setOnAction((ActionEvent t) -> {
        if (nextButton==b1) {
            nextButton=b2 ;
        } else {
            System.out.println("Wrong");
        }
    });

    b2.setOnAction((ActionEvent t1) -> {
        // etc
    });

    b3.setOnAction((ActionEvent t2) -> {
        // etc
    });

}