当我按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();
}
}
答案 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);这样你就可以更明显地看到哪一个。