您好,登录后才能下订单哦!
本篇内容主要讲解“JavaFX如何实现界面跳转”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaFX如何实现界面跳转”吧!
利用BorderPane的setCenter重新设置中心节点进行界面跳转。

好处是其他区域的节点不会更新,只会更新center中的节点,并且可以控制是每个页面是否可以重新加载,方便。
scene节点如下,在BorderPane的top中设置按钮事件,更新center。
fxml
<BorderPane prefHeight="200.0" prefWidth="200.0" fx:id="container"> <top> <HBox alignment="CENTER" spacing="20.0" BorderPane.alignment="CENTER"> <children> <Button mnemonicParsing="false" text="首页" onAction="#toHome" /> <Button mnemonicParsing="false" text="文件" onAction="#toFile"/> <Button mnemonicParsing="false" text="设置" onAction="#toSetting"/> </children> <padding> <Insets bottom="10.0" top="10.0" /> </padding> </HBox> </top> <center> </center> </BorderPane>
controller
public class JumpController {
public BorderPane container;
public void initialize() {
URL resource = getClass().getResource("/fxml/jump/home.fxml");
try {
setCenter(resource);
} catch (IOException e) {
e.printStackTrace();
}
}
private void setCenter(URL url) throws IOException {
FXMLLoader loader = new FXMLLoader(url);
loader.load();
Parent root = loader.getRoot();
container.setCenter(root);
}
public void toHome(ActionEvent event) {
URL resource = getClass().getResource("/fxml/jump/home.fxml");
try {
setCenter(resource);
} catch (IOException e) {
e.printStackTrace();
}
}
public void toFile(ActionEvent event) {
URL resource = getClass().getResource("/fxml/jump/file.fxml");
try {
setCenter(resource);
} catch (IOException e) {
e.printStackTrace();
}
}
public void toSetting(ActionEvent event) {
URL resource = getClass().getResource("/fxml/jump/setting.fxml");
try {
setCenter(resource);
} catch (IOException e) {
e.printStackTrace();
}
}
}StackPane也是JavaFX中的一个面板容器,特点是里面的元素是堆叠在一起的,每次只显示最上层元素。利用这个特点,可以把多个界面加载之后作为StackPane的字节的,然后调整StackPane的顶层元素即可。

这种方法比较适合每个页面跳转时不需要重新加载的情况,效率比较高,只是改变字节点的顺序。
fxml
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="529.0" prefWidth="785.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="xyz.yuelai.controller.Jump1Controller"> <HBox alignment="CENTER" spacing="20.0"> <children> <Button mnemonicParsing="false" onAction="#toHome" text="首页" /> <Button mnemonicParsing="false" onAction="#toFile" text="文件" /> <Button mnemonicParsing="false" onAction="#toSetting" text="设置" /> </children> <padding> <Insets bottom="10.0" top="10.0" /> </padding> </HBox> <StackPane prefHeight="150.0" prefWidth="200.0" VBox.vgrow="ALWAYS" fx:id="container" /> </VBox>
controller
public class Jump1Controller {
public StackPane container;
private Parent home;
private Parent file;
private Parent setting;
public void initialize() {
try {
URL homeUrl = getClass().getResource("/fxml/jump/home.fxml");
home = getParent(homeUrl);
URL fileUrl = getClass().getResource("/fxml/jump/file.fxml");
file = getParent(fileUrl);
URL settingUrl = getClass().getResource("/fxml/jump/setting.fxml");
setting = getParent(settingUrl);
container.getChildren().addAll(setting, file, home);
} catch (IOException e) {
e.printStackTrace();
}
}
private Parent getParent(URL url) throws IOException {
FXMLLoader loader = new FXMLLoader(url);
return loader.load();
}
public void toHome(ActionEvent event) {
home.toFront();
}
public void toFile(ActionEvent event) {
file.toFront();
}
public void toSetting(ActionEvent event) {
setting.toFront();
}
}三个界面的fxml如下:
首页
<AnchorPane prefHeight="460.0" prefWidth="781.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> <children> <Label alignment="CENTER" layoutX="297.0" layoutY="131.0" prefHeight="110.0" prefWidth="129.0" text="首页" textFill="WHITE" AnchorPane.leftAnchor="200.0" AnchorPane.rightAnchor="200.0" AnchorPane.topAnchor="100.0"> <font> <Font name="System Bold" size="20.0" /> </font> </Label> </children> </AnchorPane>
文件
<AnchorPane prefHeight="460.0" prefWidth="781.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> <children> <Label alignment="CENTER" layoutX="297.0" layoutY="131.0" prefHeight="110.0" prefWidth="129.0" text="文件" textFill="WHITE" AnchorPane.leftAnchor="200.0" AnchorPane.rightAnchor="200.0" AnchorPane.topAnchor="100.0"> <font> <Font name="System Bold" size="20.0" /> </font> </Label> </children> </AnchorPane>
设置
<AnchorPane prefHeight="460.0" prefWidth="781.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"> <children> <Label alignment="CENTER" layoutX="297.0" layoutY="131.0" prefHeight="110.0" prefWidth="129.0" text="设置" textFill="WHITE" AnchorPane.leftAnchor="200.0" AnchorPane.rightAnchor="200.0" AnchorPane.topAnchor="100.0"> <font> <Font name="System Bold" size="20.0" /> </font> </Label> </children> </AnchorPane>
其他跳转方式,比如重新设置scene,这就相当于重新加载当前窗口,如非必要还是不推荐。上面两种方式都是操作的容器里面的节点。实现了视觉上的界面跳转。所以不局限于BorderPane和StackPane,只是这两个容器用起来比较方便。
到此,相信大家对“JavaFX如何实现界面跳转”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。