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

JavaFX加载新Scene时如何保留ToolBar?

如何在加载新Scene时保留ToolBar?

我来帮你解决这个问题!你现在的核心问题在于每次点击按钮时直接替换了整个Stage的Scene,而ToolBar是原Scene的一部分,新Scene自然就没有它了。正确的思路是把ToolBar固定在一个父容器中,只切换中间的内容区域,而非替换整个Scene。


第一步:重构Main.fxml的布局

把原来的GridPane改成BorderPane,让ToolBar固定在顶部,中间预留一个可替换的内容区域:

<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.layout.StackPane?>

<BorderPane fx:controller="main.java.Controller" xmlns:fx="http://javafx.com/fxml">
    <!-- 固定在顶部的ToolBar -->
    <top>
        <ToolBar prefHeight="40.0" prefWidth="400.0">
            <Button text="testButton" onAction="#testButton1"/>
        </ToolBar>
    </top>
    <!-- 用于切换页面的内容容器 -->
    <center>
        <StackPane fx:id="contentArea"/>
    </center>
</BorderPane>

第二步:修改Controller逻辑

不再替换整个Scene,而是加载新的FXML内容并替换到内容区域中。另外注意你原来代码里的Main.main()是错误调用——main()是程序入口方法,根本不会返回Stage对象,我们完全不需要替换Scene就能实现页面切换:

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.layout.StackPane;
import java.io.IOException;

public class Controller {
    @FXML
    private StackPane contentArea; // 对应FXML里的内容区域

    @FXML
    private void testButton1() {
        try {
            // 加载新页面的内容
            Parent newContent = FXMLLoader.load(getClass().getResource("testButton1.fxml"));
            // 清空原有内容并添加新内容
            contentArea.getChildren().clear();
            contentArea.getChildren().add(newContent);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

第三步:调整testButton1.fxml的结构

你的新页面FXML只需要包含页面核心内容即可,不需要重复添加ToolBar,示例如下:

<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Label?>

<VBox alignment="CENTER" spacing="10">
    <Label text="这是新页面的内容"/>
    <!-- 这里可以添加其他业务控件 -->
</VBox>

补充说明:原代码的问题点

  1. 你调用Main.main()的方式完全错误,这个方法是程序启动的静态入口,不会返回任何Stage实例;
  2. 每次替换整个Scene的操作会丢弃原Scene中的所有控件(包括ToolBar),这就是新页面看不到ToolBar的直接原因。

内容的提问来源于stack exchange,提问作者methuselah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:11:00