JavaFX 多个窗口(Stage)切换
JavaFX 多个窗口(Stage)切换
1.引言
最近在做一个JavaGUI程序,考虑到JavaFX具有的MVC特性和其比Swing更丰富、便便利,故而选择了JavaFX。在使用
Java FX的过程中,最先遇到的问题就是Java FX的多个窗口切换的问题。下面是我采用的方式。
2.准备
首先是写两个可以独立显示的界面(Main.java、Second.java)。其中Main.java 使用的FXML文件是Main.fxml;Second.java 使用的FXML文件是Second.fxml;Main.java对应的控制类为MainController.java。
其中Main.fxml中仅有一个按钮,用以触发第二个页面的显示。
3.分析
将每个界面调试完成后,在Second.java 添加方法showWindow(),在showWindow()中对Start()调用;在MainController.java中的Button事件调用方法【changeWindow()】中对Second.java的showWindow()方法调用。
4.源码
Main.javapackage test; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("Main.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root, 600, 400)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
Second.java
package test; import java.io.IOException; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.stage.Stage; public class Second extends Application { Stage stage=new Stage(); @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("Second.fxml")); primaryStage.setTitle("Hello World"); primaryStage.setScene(new Scene(root, 600, 400)); primaryStage.show(); } public static void main(String[] args) { launch(args); } public void showWindow() throws Exception { start(stage); } }
MainController.java
package test; import java.net.URL; import java.util.ResourceBundle; import javafx.fxml.Initializable; public class MainController implements Initializable { public MainController() { // TODO Auto-generated constructor stub } @Override public void initialize(URL arg0, ResourceBundle arg1) { // TODO Auto-generated method stub } public void changeWindow() throws Exception { test.Second second=new Second(); second.showWindow(); } }
Main.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="305.0" prefWidth="495.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="test.MainController"> <children> <Button layoutX="182.0" layoutY="141.0" mnemonicParsing="false" onAction="#changeWindow" text="Go to Second Stage" /> <Label layoutX="70.0" layoutY="60.0" text="MainStage" /> </children> </AnchorPane>
Second.fxml
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="test.Second"> <children> <Label layoutX="86.0" layoutY="77.0" text="Hello! I am Second Stage!" /> </children> </AnchorPane>
5.显示效果
6.参考博客
1. https://blog.csdn.net/MAILLIBIN/article/details/47031505
2. https://blog.csdn.net/legendnovo/article/details/10555941