本文共 2163 字,大约阅读时间需要 7 分钟。
/** 工厂 */public class Factory { public Stage createStage(String title, int width,int height, String file) throws IOException { //URL url = getClass().getResource("../../../../" + file); URL url = Factory.class.getClassLoader().getResource(file); Parent root = FXMLLoader.load(url); Stage stage = new Stage(); stage.setTitle(title); stage.setScene(new Scene(root, width, height)); stage.setResizable(false); //设置在stage关闭时需要进行的操作 stage.setOnCloseRequest(new EventHandler() { @Override public void handle(WindowEvent event) { //此处当stage关闭时,同时结束程序,避免stage关闭后,程序界面关闭了,但后台线程却依然运行的问题 System.exit(0); } }); //初始化Stage时将该实例添加进StageManager的容器中,方便管理 Context.stageManager.addStage(file.split("\\.")[0], stage); return stage; }}/*注意: 如上述代码所示,获取fxml文件的URL有两种方式,第一种方式只能将fxml文件放在文件夹中才能获取到,一旦打包为jar包后,如果将fxml文件也打包进了jar文件,那么就无法获取到。 第二种方式,即使打包进jar文件中,也依然能够正常获取到,所以个人推荐第二种方式访问fxml文件。*/
/** Stage管理类 */public class StageManager { private MapstageMap = new HashMap<>();//存放所有的Stage实例 public void addStage(String name, Stage stage){ stageMap.put(name, stage); } public Stage getStage(String name){ return stageMap.get(name); } public void closeStage(String name){ stageMap.get(name).close(); } //实现Stage的跳转,从currentStage跳转到targetStage public void jump(String currentStageName, String targetStageName){ stageMap.get(currentStageName).close(); stageMap.get(targetStageName).show(); } public void release(String name){ stageMap.remove(name); }}
//在全局上下文中,持有StageManager和Factory的实例,使用时从此处获取public class Context { public static StageManager stageManager = new StageManager(); public static Factory factory = new Factory();}
//访问test1.fxml创建Stage,并显示Stage test1 = Context.factory.createStage("我是标题", 800, 600, "test1.fxml");test1.show();//访问test2.fxml创建StageContext.factory.createStage("我是标题", 800, 600, "test2.fxml");//从test1跳转到test2Context.stageManager.jump("test1", "test2");
转载地址:http://qvtlf.baihongyu.com/