为什么我的按钮在Javafx中表现得很奇怪

时间:2016-08-13 09:16:43

标签: java javafx

当我按button1时,我的场景没有改变,并且表示已按下button2。这是为什么?

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    Stage window;
    Button button, button2;
    Scene scene, scene2;

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("title");

        // label 1
        Label label1 = new Label("This is scene 1");

        // button 1
        button = new Button("Go to scene 2");
        button.setOnAction(e -> {
            window.setScene(scene2);
            System.out.println("button 1 pressed");
        });

        // layout 1
        StackPane layout = new StackPane();
        layout.getChildren().addAll(label1, button);
        scene = new Scene(layout, 200, 500);

        // label 2
        Label label2 = new Label("This is scene 2");

        // button 2
        button2 = new Button("go to scene 1");
        button.setOnAction(e -> {
            window.setScene(scene);
            System.out.println("button 2 pressed");
        });

        // layout 2
        StackPane layout2 = new StackPane();
        layout2.getChildren().addAll(label2, button2);
        scene2 = new Scene(layout2, 200, 500);

        window.setScene(scene);
        window.show();

    }
}

1 个答案:

答案 0 :(得分:1)

当您定义按钮2时,您的' setOnAction'用于按钮(不是按钮2)。因此,要使其正常工作,请将button2的button.setOnAction更改为button2.setOnAction。然后它会工作。

将来可能对您有所帮助的一些指示:如果您调试程序而不是在window.setScene(scene2)上运行并设置断点;另一个在window.setScene(场景);然后你会发现当按下按钮时,执行会在window.setScene(scene);

处停止

换句话说,按下button1时调用了错误的动作处理程序。你有答案。

此外,如果您尝试测试这样的两个场景,请使另一个场景与另一场景不同,例如scene1 =新场景(布局,200,500);和scene2 =新场景(布局,500,200);这样你就可以更明显地看到哪一个。