JavaFX實現(xiàn)界面跳轉(zhuǎn)
界面跳轉(zhuǎn),很常見的一個功能,在桌面程序中,可以多窗口跳轉(zhuǎn),也可以在一個窗口中跳轉(zhuǎn)。不同方式對應不同場景。下面簡單介紹一下,JavaFX中單窗口界面跳轉(zhuǎn)方式。
BorderPane 跳轉(zhuǎn)
利用BorderPane的setCenter重新設置中心節(jié)點進行界面跳轉(zhuǎn)。

好處是其他區(qū)域的節(jié)點不會更新,只會更新center中的節(jié)點,并且可以控制是每個頁面是否可以重新加載,方便。
scene節(jié)點如下,在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跳轉(zhuǎn)
StackPane也是JavaFX中的一個面板容器,特點是里面的元素是堆疊在一起的,每次只顯示最上層元素。利用這個特點,可以把多個界面加載之后作為StackPane的字節(jié)的,然后調(diào)整StackPane的頂層元素即可。

這種方法比較適合每個頁面跳轉(zhuǎn)時不需要重新加載的情況,效率比較高,只是改變字節(jié)點的順序。
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" style="-fx-background-color: #a00;" 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" style="-fx-background-color: #0a0;" 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" style="-fx-background-color: #00a;" 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>
其他跳轉(zhuǎn)方式,比如重新設置scene,這就相當于重新加載當前窗口,如非必要還是不推薦。上面兩種方式都是操作的容器里面的節(jié)點。實現(xiàn)了視覺上的界面跳轉(zhuǎn)。所以不局限于BorderPane和StackPane,只是這兩個容器用起來比較方便。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用AOP統(tǒng)一日志管理的方法詳解
這篇文章主要為大家分享一個干貨:超簡潔SpringBoot使用AOP統(tǒng)一日志管理,文中的示例代碼講解詳細,感興趣的小伙伴快跟隨小編一起學習學習吧2022-05-05
SpringBoot啟動時如何通過啟動參數(shù)指定logback的位置
這篇文章主要介紹了SpringBoot啟動時如何通過啟動參數(shù)指定logback的位置,在spring boot中,使用logback配置的方式常用的有兩種,本文給大家介紹的非常詳細,需要的朋友可以參考下2023-07-07
Spring使用@Autowired注解靜態(tài)實例對象方式
這篇文章主要介紹了Spring使用@Autowired注解靜態(tài)實例對象方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java實現(xiàn)根據(jù)模板讀取PDF并替換指定內(nèi)容
在實際開發(fā)里,經(jīng)常會遇到需要根據(jù)?PDF?模板文檔生成特定?PDF?的需求,本文將利用Java中的iText實現(xiàn)讀取?PDF?模板文檔并替換指定內(nèi)容,最后重新生成新PDF,感興趣的可以了解下2025-02-02

