zoukankan      html  css  js  c++  java
  • JavaFx在不同的fxml文件加载时传递参数问题

    一、问题

    典型的JavaFX程序Main,fxml,Controller 之间的加载关系是这样的,Main启动程序,加载fxml,再由 fxml 加载指定的 controller,这个过程是单向的,所以其实 fxml 中并没法绑定 Main 中的 stage和scene,必须由 Main 加载一个 stage 后,由 fxml 文件对进行初始化设置,所以 fxml 文件不会指定 Stage,Scene,一般由 Main 来指定 Stage 及其对应的 Scene,或者将Main中的Stage对象传递给Controller 来进行设置。相应的Scene绑定FXMLLoader读取到的其他页面的fxml文件获取的Root对象,这样就可以实现在Controller中控制页面切换逻辑。

    但现在我有这样一个需求,我要将当前窗口的参数传递给一个辅助窗口,那该怎么办?

    stackoverflow上找到了解决方案,这里简单总结一下。

    二、解决方案

    @FXML
    private HBox main;//界面切换的容器
     
    public void show(Customer customer) {
      FXMLLoader loader = new FXMLLoader(getClass().getResource("test.fxml"));
      //load必须要先执行,否则下面的controller是null
      Parent root =loader.load();
      TestController controller = loader.getController();
      controller.initData("123");
     
      main.getChildren().clear();
      main.getChildren().add(root);
    }

    这里将之前加载fxml文件的过程分解了,加载后,通过initData给controller传递参数

    控件代码:

    public class TestController implements Initializable{
      @FXML private Label name;
      void initialize() {}
      void initData(String name) {
        name.setText(name);
      }
    }

    值得注意的是fxml文件中关联controller的部分不要做修改。

    <?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 prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="TestController">
       <children>
          <Label fx:id="name" layoutX="199.0" layoutY="149.0" text="Label" />
       </children>
    </AnchorPane>
    作者:王陸

    -------------------------------------------

    个性签名:罔谈彼短,靡持己长。做一个谦逊爱学的人!

    本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。鉴于博主处于考研复习期间,有什么问题请在评论区中提出,博主尽可能当天回复,加微信好友请注明原因

  • 相关阅读:
    关于SVN更新慢的解决方法
    用PS做法线,高光贴图的最简图文教程
    3dmax教程 人物+骨骼+蒙皮+动画教程
    django 模板视图,表单视图,各种视图
    django settings最佳配置
    groovy 弹出菜单
    python construct文档
    用powershell实现自动化操作
    如何用chrome扩展将网页变成黑底白字,用以保护视力
    打造基于CentOS7的xfce最简工作环境
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/14531806.html
Copyright © 2011-2022 走看看