实现原理顺着往下看就明白了,流程看红色字体。具体还有什么问题可以留言。
主页面配置文件,一共三个按钮。这里说明第一个按钮触发打开新窗口
<?xml version="1.0" encoding="UTF-8"?> <!--导入JavaFXML类--> <?import javafx.scene.text.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <!--布局控件BorderPane,fx:controller属性用于声明事件处理的Controller,值为Controller类的类全名--> <!--xmlns用于声明默认命名空间,这里的声明随着你安装的Java JDK版本号的不同可以不同,但是最好不要比你安装的JDK版本高--> <BorderPane fx:controller="APP.mainController" xmlns="http://javafx.com/javafx/8.0.31" xmlns:fx="http://javafx.com/fxml/1"> <center> <VBox fx:id="vBox" alignment="CENTER" spacing="25" > <Button fx:id="b1" text="FOO管理" onAction="#fooButtonAction"> <font> <Font name="Times New Roman" size="15" /> </font> </Button> <Button fx:id="b2" text="Goods管理" onAction="#goodhandleButtonAction"> <font> <Font name="Times New Roman" size="15" /> </font> </Button> <Button fx:id="b3" text="统计检索" onAction="#searchhandleButtonAction"> <font> <Font name="Times New Roman" size="15" /> </font> </Button> </VBox> </center> </BorderPane>
主页面的控制类
package APP; import java.io.IOException; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; public class mainController { @FXML private Button b1; @FXML private Button b2; @FXML private Button b3; @FXML protected void fooButtonAction(ActionEvent event) throws IOException { FooPane.showFooPane(); } @FXML protected void goodhandleButtonAction(ActionEvent event) throws IOException { GoodsPane.showFooPane(); } @FXML protected void searchhandleButtonAction(ActionEvent event) throws IOException { searchPane.showFooPane(); } }
主页面启动类
package APP; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class MainPaneFxml extends Application { @Override public void start(Stage primaryStage) throws Exception { try { BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("main.fxml")); Scene scene = new Scene(root, 500, 250); primaryStage.setScene(scene); primaryStage.setTitle("主程序"); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Application.launch(args); } }
点击第一个按钮以后打开的窗口的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!--导入JavaFXML类--> <?import javafx.scene.text.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <!--布局控件BorderPane,fx:controller属性用于声明事件处理的Controller,值为Controller类的类全名--> <!--xmlns用于声明默认命名空间,这里的声明随着你安装的Java JDK版本号的不同可以不同,但是最好不要比你安装的JDK版本高--> <BorderPane fx:controller="APP.FooController" xmlns="http://javafx.com/javafx/8.0.31" xmlns:fx="http://javafx.com/fxml/1"> <center> <GridPane alignment="center" hgap="5" vgap="10"> <children> <Label text="姓名" GridPane.columnIndex="0" GridPane.rowIndex="0"/> <TextField fx:id="fName" GridPane.columnIndex="1" GridPane.rowIndex="0" alignment="center_right"/> <Label text="身份证" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField fx:id="fIDcard" GridPane.columnIndex="1" GridPane.rowIndex="1" alignment="center_right"/> <Label text="省" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <TextField fx:id="fProvince" GridPane.columnIndex="1" GridPane.rowIndex="2" alignment="center_right"/> <Label text="市" GridPane.columnIndex="0" GridPane.rowIndex="3"/> <TextField fx:id="fCity" GridPane.columnIndex="1" GridPane.rowIndex="3" alignment="center_right"/> <Label text="乡" GridPane.columnIndex="0" GridPane.rowIndex="4"/> <TextField fx:id="fTown" GridPane.columnIndex="1" GridPane.rowIndex="4" alignment="center_right"/> <Label text="村" GridPane.columnIndex="0" GridPane.rowIndex="5"/> <TextField fx:id="fVillage" GridPane.columnIndex="1" GridPane.rowIndex="5" alignment="center_right"/> <Button fx:id="b1" text="导出FOO为HTML封装" onAction="#htmlButtonAction" GridPane.columnIndex="0" GridPane.rowIndex="6"> <font> <Font name="Times New Roman" size="15" /> </font> </Button> <Button fx:id="b2" text="导出FOO为XML封装" onAction="#xmlButtonAction" GridPane.columnIndex="1" GridPane.rowIndex="6"> <font> <Font name="Times New Roman" size="15" /> </font> </Button> </children> </GridPane> </center> </BorderPane>
点击第一个按钮以后出发的操作
@FXML protected void fooButtonAction(ActionEvent event) throws IOException { FooPane.showFooPane(); }
上述方法里类的源代码。在这个类里面加载了新窗口的配置文件
package APP; import java.io.IOException; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class FooPane extends AnchorPane { private static FooPane fooPane; private Stage stage; // 构造方法:私有 private FooPane() { try { BorderPane root = (BorderPane)FXMLLoader.load(getClass().getResource("FOO.fxml")); stage = new Stage(); stage.setTitle("FOO管理"); stage.setScene(new Scene(root, 500, 250)); } catch (IOException ex) { ex.printStackTrace(); } } public Stage getStage() { return this.stage; } // 外部调用方法 public static void showFooPane() { fooPane = new FooPane(); // 构造实例 fooPane.getStage().show(); // 显示页面 } }
上述是没有数据交互的打开新窗口,如果想在打开新窗口的同时初始化新窗口页面显示的内容,评论区留言。