您好,登錄后才能下訂單哦!
本篇內容主要講解“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。