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。

    JavaFX 多个窗口(Stage)切换_第1张图片

    其中Main.fxml中仅有一个按钮,用以触发第二个页面的显示。

JavaFX 多个窗口(Stage)切换_第2张图片

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










   
      

    Second.fxml










    
        
      


5.显示效果

JavaFX 多个窗口(Stage)切换_第3张图片     ---》     JavaFX 多个窗口(Stage)切换_第4张图片

6.参考博客

1.    https://blog.csdn.net/MAILLIBIN/article/details/47031505

2.    https://blog.csdn.net/legendnovo/article/details/10555941

 

你可能感兴趣的:(java)