JavaFX 多个窗口(Stage)切换

原创 2018年04月16日 16:57:42

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.java

package 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

 

javafx之登陆界面的跳转

界面布局用到的是fxml而非纯java代码,工具是javafx sence builder 账号:account 密码:password 登陆成功: 可以点击退出登陆返回...
  • u011566000
  • u011566000
  • 2013-08-29 22:15:07
  • 9880

JavaFX如何显示多个Stage窗口

其实很简单,就是用多个Stage,通过其中一个Stage中的事件来激活其它Stage的show(),当然,这些Stage也可以一次性同时显示出来。 package twostagejav...
  • MAILLIBIN
  • MAILLIBIN
  • 2015-07-23 23:58:32
  • 5264

JavaFX 多个窗口(Stage)切换

JavaFX  多个窗口(Stage)切换1.引言    最近在做一个JavaGUI程序,考虑到JavaFX具有的MVC特性和其比Swing更丰富、便便利,故而选择了JavaFX。在使用Java FX...
  • weixin_38968305
  • weixin_38968305
  • 2018-04-16 16:57:42
  • 23

javaFx2.x 登陆及其切换界面

最近对javaFx特别感兴趣,闲暇时对着官方文档及GOOGLE学习 没有太详细的解说,但在代码中有还算较明白的注释 示例使用JDK7,开发工具为eclipse和e(rx)clipse插件 效果...
  • weiwei5910
  • weiwei5910
  • 2013-05-22 19:02:41
  • 5909

JavaFX - 实现管理多个Stage窗口切换及源码解析

前言      JavaFX相比AWT就是和Android一样通过xml文件来定义界面的设计,并且可以通过fxml资源文件结合Java代码来控制界面的变化。摒弃之前写AWT那种什么都在Java代码中...
  • nthack5730
  • nthack5730
  • 2016-07-13 21:22:37
  • 21700

JavaFX:实现页面切换

页面切换 JavaFX多个页面(Stage)之间的切换的实现的基本思路: 构建一个主Stage和多个副Stage页面(构建方式基本上市一样的); ...
  • Al_assad
  • Al_assad
  • 2017-01-22 01:42:47
  • 7119

javaFx 学习--之组件篇1(边框与布局管理1)

       编写了前面几小程序,大家对javaFx程序以有初步认识,下面我们一起来学习javaFx的组件, 这些组件包括,1.边框与布局管理;2.菜单;3.标签;4.面板组,简单标签,文本框,5.按...
  • javacheng
  • javacheng
  • 2007-07-08 22:58:00
  • 3946

JavaFX的并发性

这章讲述 javafx.concurrent包 提供创建多线程应用程序的功能。
  • songliujun
  • songliujun
  • 2014-12-24 18:15:52
  • 2653

javafx官方文档学习之一Application与Stage,Scene初探

javafx已经嵌入在jre之中 2 javafx UI设计工具JavaFX Scene Builder. Oracle支持的javafx额外UI库,现在只支持jdk8:contr...
  • xby1993
  • xby1993
  • 2013-12-08 19:48:39
  • 3091

javaFx2.x 登陆及其切换界面

最近对javaFx特别感兴趣,闲暇时对着官方文档及GOOGLE学习 没有太详细的解说,但在代码中有还算较明白的注释 示例使用JDK7,开发工具为eclipse和e(rx)clipse...
  • xiangnideye1
  • xiangnideye1
  • 2014-12-31 04:11:47
  • 2903
收藏助手
不良信息举报
您举报文章:JavaFX 多个窗口(Stage)切换
举报原因:
原因补充:

(最多只允许输入30个字)