JavaFX/SceneBuilder - 仅更改场景的一部分
JavaFX/SceneBuilder - Changing only PART of a Scene
我是 JavaFX 的新手,我还没有找到任何关于这件事的 tutorial/answer。
所以基本上我想做的是只改变场景的一部分。我想在顶部保留一个静态菜单栏,只根据单击哪个菜单按钮更改底部。这意味着每个 "page" 我需要不同的 FXML 文件和控制器 类。
查看可用的 JavaFX 功能,我认为 SubScene 可以胜任。但经过进一步调查,似乎 SubScenes 是为 3D 东西制作的?所以我真的不知道我应该做什么。
如有任何帮助,我们将不胜感激!
更改场景的各个部分很容易。在主场景中,您放置了一个容器,您可以在其中动态加载不同的视图。以下是您对一般 "static" 菜单的描述的示例:
这是基本观点。在 mainView
中,加载了不同的视图(默认为 view_a.fxml),并从“视图”>“显示视图 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>
控制器本身没什么特别的。它只是将一个“.fxml”添加到所选选项的 ID,加载具有结果名称的 FXML
文件,并将其放在 mainView
中心
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();
}
}
}
我是 JavaFX 的新手,我还没有找到任何关于这件事的 tutorial/answer。
所以基本上我想做的是只改变场景的一部分。我想在顶部保留一个静态菜单栏,只根据单击哪个菜单按钮更改底部。这意味着每个 "page" 我需要不同的 FXML 文件和控制器 类。
查看可用的 JavaFX 功能,我认为 SubScene 可以胜任。但经过进一步调查,似乎 SubScenes 是为 3D 东西制作的?所以我真的不知道我应该做什么。
如有任何帮助,我们将不胜感激!
更改场景的各个部分很容易。在主场景中,您放置了一个容器,您可以在其中动态加载不同的视图。以下是您对一般 "static" 菜单的描述的示例:
这是基本观点。在 mainView
中,加载了不同的视图(默认为 view_a.fxml),并从“视图”>“显示视图 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>
控制器本身没什么特别的。它只是将一个“.fxml”添加到所选选项的 ID,加载具有结果名称的 FXML
文件,并将其放在 mainView
中心
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();
}
}
}