【问题标题】:How can I use a variable from another Controller in JavaFX如何在 JavaFX 中使用来自另一个控制器的变量
【发布时间】:2013-01-08 18:43:09
【问题描述】:

我有两个场景 Login.fxml 和 MainView.fxml 以及两个不同的控制器 LoginController.java 和 MainViewControler.java

在 LoginController 中,我完成了登录并获取 JSessionID 的值并将其存储在一个对象中的整个过程,如下所示:

loginGateway = loginGateway(gateway);

现在在 MainViewController 中,我需要使用这个对象 (loginGateway) 来获取 JSessionID 并向服务器发出其他请求。但是我怎样才能在另一个控制器类(MainViewController.java)中访问这个对象????

【问题讨论】:

    标签: java controller javafx-2 javafx viewcontroller


    【解决方案1】:

    使用Passing Parameters JavaFX FXML 中解决方案的变体。

    设置一个LoginManager,它同时引用LoginControllerMainViewController

    1. loginManager 使用loginController 创建登录屏幕,并将对自身的引用传递给loginController
    2. 当登录通过时,loginController 通知loginManager 登录sessionID
    3. loginManager 然后可以创建一个MainViewController,将mainViewController 传递给sessionID 并用主视图替换场景内容。

    这里有一个指向some sample code 的链接来演示这种方法。

    【讨论】:

    • 你测试了吗?因为我必须修复一些东西来构建它,但仍然没有运行。例如:FXMLLoader loader = new FXMLLoader("mainview.fxml"); MainViewController 控制器 = loader.MainViewController>getController();控制器.initSessionID(会话ID);场景.setRoot(loader.load());我认为应该是:
    • FXMLLoader loader = FXMLLoader.load(getClass().getResource("MainView.fxml")); MainViewController 控制器 = (MainViewController) loader.getController();控制器.initSessionID(会话ID);场景.setRoot(loader.load());即使最后一行 scene.setRoot(loader.load());继续显示错误(类Scene中的方法setRoot不能应用于给定类型;必需:Parent,找到:Object,原因:实际参数Object无法通过方法调用转换转换为Parent)您能再帮我一次吗?请。
    • 我只是粘贴了一个未编译的代码 sn-p 来展示一般方法。我将通过带有 fxml 文件的编译器运行所有内容以及生成新版本的所有内容,您只需复制并粘贴即可执行 - 不过这需要我一些时间。完成后我会回复。
    • 将原始伪代码替换为指向外部托管的可编译示例的链接。
    • @jewelsea 我发现您的源示例真的很有帮助! :) 感谢分享
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2017-11-18
    相关资源
    最近更新 更多