You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:29:47