当前位置: 首页 > 知识库问答 >
问题:

JavaFX/SceneBuilder-只更改部分场景

斜向文
2023-03-14

所以基本上我想做的是改变我的场景的一部分。我想保持一个静态菜单栏在顶部,只改变底部的部分根据哪个菜单按钮正在被点击。这意味着每个“页面”都需要不同的FXML文件和控制器类。

看看可用的JavaFX特性,我认为SubScene可以完成这项工作。但经过进一步的调查,似乎子场景是为3D东西制作的?所以我真的不知道我该做什么。

任何帮助都将不胜感激!

共有1个答案

易弘亮
2023-03-14

改变场景的部分很容易。在主场景中,您放置了一个容器,在其中动态加载不同的视图。下面是一个关于一般“静态”菜单的描述的示例:

这是基本观点。在MainView中,将加载不同的视图(默认为view_a.fxml),并从View>Show View X菜单中进行更改。我为各个menuitem分配的ID是要加载的fxml文件的名称。

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
    <top>
        <MenuBar BorderPane.alignment="CENTER">
            <menus>
                <Menu mnemonicParsing="false" text="File">
                    <items>
                        <MenuItem mnemonicParsing="false" text="Close" />
                    </items>
                </Menu>
                <Menu mnemonicParsing="false" text="View">
                    <items>
                        <MenuItem fx:id="view_a" mnemonicParsing="false" text="Show View A" onAction="#handleChangeView"/>
                        <MenuItem fx:id="view_b" mnemonicParsing="false" text="Show View B" onAction="#handleChangeView"/>
                    </items>
                </Menu>
            </menus>
        </MenuBar>
    </top>
    <center>
        <BorderPane fx:id="mainView">
            <center>
                <fx:include source="view_a.fxml"/>
            </center>
        </BorderPane>
    </center>
</BorderPane>

这是其中一个视图(view_a.fxml)。另一个也一样,我就不展示了。在这些视图中,有趣的是,我没有指定控制器,因为我以后会在主框架上使用控制器(这对小的事情很好,但对于大的项目,使用不同的控制器更好)。

<AnchorPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">
    <children>
        <Label text="View A"/>
    </children>
</AnchorPane>
public class Controller {
    @FXML
    private BorderPane mainView;

    @FXML
    private void handleChangeView(ActionEvent event) {
        try {
            String menuItemID = ((MenuItem) event.getSource()).getId();

            FXMLLoader loader = new FXMLLoader(getClass().getResource(menuItemID + ".fxml"));
            loader.setController(this);

            mainView.setCenter(loader.load());
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 类似资料:
  • }`我正在计划在同一舞台上使不同的部分成为自己的场景。如果有任何帮助,我将不胜感激。我正在使用NetBeans8.2。

  • 我是JavaFX的新手。我有我的主要场景和次要场景;当我从第一个场景切换到第二个场景时,窗口的条形图变得可见。我该怎么解决呢?

  • 问题内容: 我正在尝试学习JavaFX,并将swing应用程序转换为JavaFX。我想做的是使用JavaFX来显示程序的进度。 我以前在Swing中所做的是首先使用自定义JComponent创建一个JFrame。然后让我的主程序调用自定义JComponent的方法,该方法将更改JComponent和repaint()中的形状颜色。 下面给出了我想在JavaFX中实现的目标的想法: 我目前将此作为我

  • 所以我要做的是,我要编写一个GUI来在LineChart上显示实时数据。到目前为止,我可以让linechart工作,但不能进入GUI。 使用scenebuilder,我制作了一个带有linechart对象的视图,以便将其链接到我生成的图表。但由于某些原因,这似乎不能与我的MainApp中的代码一起工作。 这只显示了带有空线程的视图。我知道图表应该知道然而,因为我可以使用它来创建一个场景,并显示到G

  • 我对JavaFX有问题。我创建了两个场景和开关按钮。当我点击那个按钮时,我正在改变场景。但之前我将fullscreen设置为true,按下按钮后,windows任务栏会显示片刻。有没有什么方法可以改变场景而不让这个任务栏可见呢?下面是代码: -----main class---- ----DesktopApplication类---- ----MyLayout类----

  • JavaFX Scene Builder没有正确地集成到IntelliJ IDE中。我让它在我的Windows7电脑上工作,但在我的mac电脑上,它给我带来了问题。首先,当我指定JavaFX场景构建器到/applications/scenbuilder/的路径时,它不会在IDE中显示场景。其次,当scene builder独立启动并修改intelliJ项目中的.xml文件时,生成的所有.xml在i