JavaFX无SceneBuilder实现场景切换问题求助
解决JavaFX场景切换问题
嘿,我明白你卡在场景切换这儿了!别着急,咱们一步步来搞定它。首先看你的代码,有两个关键问题需要修正:一是StartUp类里没给主舞台设置初始场景,二是Testscherm里的按钮不知道该切换到哪个场景。
第一步:修复初始场景设置
先把StartUp里的start方法改一下,启动时要先把第一个场景绑定到主舞台上,不然窗口打开后是空的:
public class StartUp extends Application { public Stage primaryStage; @Override public void start(Stage primaryStage) { // 第一个场景 Testscherm ts = new Testscherm(); Scene scene1 = new Scene(ts, 400, 400); // 第二个场景 Testscherm2 ts2 = new Testscherm2(); Scene scene2 = new Scene(ts2, 400, 400); primaryStage.setTitle("TestScherm"); // 新增:设置初始场景,让启动后第一个界面正常显示 primaryStage.setScene(scene1); primaryStage.show(); // 传递切换所需的舞台和目标场景给Testscherm ts.setSceneSwitcher(primaryStage, scene2); } public static void main(String[] args) { launch(args); } }
第二步:给Testscherm添加场景切换逻辑
接下来修改Testscherm类,让它能接收主舞台和目标场景,然后在按钮点击时触发切换:
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.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Testscherm extends VBox { private Label label1; private Button Button2; private TextField txf1; // 新增:保存舞台和目标场景的字段,用于后续切换 private Stage stage; private Scene targetScene; public Testscherm() { buildGui(); } public void buildGui() { label1 = new Label("label1"); Button2 = new Button("click me"); txf1 = new TextField(); this.getChildren().addAll(label1, Button2, txf1); Button2.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { // 新增:触发场景切换 if (stage != null && targetScene != null) { stage.setScene(targetScene); } } }); } // 新增:用于设置切换所需的舞台和场景的方法 public void setSceneSwitcher(Stage stage, Scene targetScene) { this.stage = stage; this.targetScene = targetScene; } }
为什么这样改?
- 我们给
Testscherm添加了setSceneSwitcher方法,让它能拿到主舞台(Stage)和要切换到的目标场景(scene2),这是场景切换的核心依赖。 - 按钮的点击事件里,调用
stage.setScene(targetScene)就能完成场景切换操作。 - 同时修复了
StartUp里没设置初始场景的问题,这样启动后第一个场景才能正常显示出来。
这样修改后,你点击click me按钮就能从Testscherm顺利切换到Testscherm2啦!
内容的提问来源于stack exchange,提问作者EwoutxD
相关产品推荐
相关产品推荐

