博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaFX的Controller之间进行通信
阅读量:2058 次
发布时间:2019-04-29

本文共 2062 字,大约阅读时间需要 6 分钟。

javafx的Controller实例是由javafx框架代码自动创建并管理的,我尝试去获取javafx托管的Controller实例,但使用网上的方法,都是获取到了一个新的Controller实例,这显然是不符合要求的,那么我们可以自己创建保存管理一份Controller的引用,在使用时就能很方便获取了。

一、创建一个可以全局访问的存放Controller实例引用的容器

package com.yqsh.kit.context;import java.util.HashMap;import java.util.Map;public class Context {
public static StageManager stageController = new StageManager(); public static Factory factory = new Factory(); //Controller容器 public static Map
controllers = new HashMap
();}

二、创建一个根控制器,作为所有的Controller的父类,在RootController的构造器中将当前实例的引用保存起来,这样每个Controller实例在创建时就会自动把自己的引用存放在我们建立的容器中,每个Controller类型的实例是唯一的

package com.yqsh.kit.controller;import com.yqsh.kit.context.Context;public class RootController {
public RootController(){ //初始化时保存当前Controller实例 Context.controllers.put(this.getClass().getSimpleName(), this); }}

三、在使用时直接从容器中获取我们自己保存的Controller引用就可以实现对某个Controller函数调用和数据传递,因为Context是全局的,所以在程序任何位置都可以方便地获取想要的Controller实例

package com.yqsh.kit.controller;import com.yqsh.kit.context.Constant;import com.yqsh.kit.context.Context;import javafx.event.ActionEvent;import javafx.fxml.FXML;import javafx.scene.control.PasswordField;import javafx.scene.control.TextField;import javafx.stage.Stage;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import java.io.IOException;public class LoginController extends RootController{
@FXML private TextField userName; @FXML private PasswordField password; private Logger logger = LogManager.getLogger(this.getClass()); @FXML public void login(ActionEvent event) throws IOException { Context.factory.createStage(Constant.WINDOW_TITLE, Constant.FUNCTION_WINDOW_WIDTH, Constant.FUNCTION_WINDOW_HEIGHT, "function.fxml");; Context.stageController.jump("login", "function"); //从容器中获取FunctionController实例 FunctionController controller = (FunctionController) Context.controllers.get(FunctionController.class.getSimpleName()); //调用FunctionController的函数 controller.printlf("i was login."); }}

转载地址:http://avtlf.baihongyu.com/

你可能感兴趣的文章
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(二)— 在linux下搭建redis服务器
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>