javafx父子窗口数据传递

javaFX写写公司内部程序还行;

父类传递子类 设置信息,调用方法

常见的第一种 代码调用

new FXMLLoader.getController子窗口传值

@FXML
private void closee(ActionEvent event){controller.closeWindow2();}
//时间传值按钮
    @FXML
    private void  timeTO(ActionEvent event){
        controller.kkk.setText(LocalTime.now().toString());//调用子窗口方法
    }
    Test2 controller;//子窗口类
    //Button 按钮
    @FXML
    private  void click(ActionEvent event) throws IOException {
    //主要 初始化子类
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/test2.fxml"));
        Pane load1 = fxmlLoader.load();
        // 加载器实例中获取控制器 Test2 类
         controller = fxmlLoader.getController();
        controller.setMsg("hello word");//调用子窗口 方法
        Scene scene = new Scene(load1);
        Stage stage = new Stage();
        stage.setScene(scene);
        stage.setTitle("我是子窗口");
        stage.show();
    }

!!!注意不要在FXMLLoader上使用静态加载功能,否则您将无法从加载器实例中获取控制器.
**
在这里插入图片描述

第二种 fxml形式调用

** fxml 页面 父调用子类 父类fxml内引用子FXML 例如

   <fx:include source="test2.fxml" fx:id="test_window"></fx:include>

!!!注意 fx:id 必须的 ; 注意id 名称 test_window 与下方关联
父级页面 引用

@FXML
Test2 test_windowController;  //test2.fxml 指定的控制器 Test2 类 

注意 成员名称 分为两部分组成 test_window 与 Controller
test_window 就是FX:id 名 ; 后缀 必须加上 Controller字段名
最后就是可以用 test_windowController 调用 引入窗口的方法,传参

在这里插入图片描述

子类 调用 父类-设置信息,方法

父类继承的Initializable 类 在重写方法中 调用 子类的公有方法 传递 父类

//**父类方法**
@FXML
Test2 test_windowController; //<fx:include source="test2.fxml" fx:id="test_window"></fx:include> // 父类FXML引入的子类 __ 父类 声明子类 test_windowController由 java fxml内部识别自动注入;
@Override
    public void initialize(URL location, ResourceBundle resources) {
		 //调用 子类方法 传递 父类;
		 test_windowController.setMainController(this);
    }
 -----------------------------------------------------
    
//**class Test2  类 方法**
    private AppController appController; //声明父类
   // 子类方法接收 父类、、
    void setMainController(AppController appController){
     this.appController=appController;
     }
AppController appController 就可以调用父类成员方法,成员属性

FXml 如何关闭自身
fxml中 找到顶级标签 例如

@FXML
AnchorPane  root2;

 Scene scene = root2.getScene();
    Stage window = (Stage) scene.getWindow();
    window.close();

B站视频讲解的UP主 LeeWyatt

B站视频基础讲解的 Aimls

参考网址
javafx中文网 https://openjfx.cn/
那些遇到过的问题 https://qa.1r1g.com/sf/ask/tagged/fxml/
csdn博客 https://blog.csdn.net/harcrance/article/details/82351697
易百教程javafx教程

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JavaFX中,如果需要在窗口之间传递对象,则可以通过以下步骤实现: 1. 创建一个可序列化的对象,该对象需要实现Serializable接口。 2. 在需要传递该对象的窗口中,创建一个public的对象属性,用于存储该对象。 3. 在需要跳转的窗口中,创建一个构造函数,该构造函数需要接收需要传递的对象作为参数,并将其赋值给对应的对象属性。 4. 实例化需要跳转的窗口,并将需要传递的对象作为参数传入构造函数中。 5. 跳转到对应的窗口,此时该窗口中的对象属性就可以访问传递过来的对象了。 例如,我们有一个名为Student的类,并且需要在两个窗口之间传递Student对象。那么可以按照以下步骤实现: 1. Student类需要实现Serializable接口: public class Student implements Serializable { private String name; private int age; //省略getter和setter方法 } 2. 在第一个窗口中创建一个public的对象属性: public class FirstWindowController { public Student student; //省略代码 } 3. 在第二个窗口中创建一个构造函数,接收需要传递的Student对象作为参数: public class SecondWindowController { private Student student; public SecondWindowController(Student student) { this.student = student; } //省略代码 } 4. 实例化第二个窗口,并将需要传递的Student对象作为参数传入构造函数中: FXMLLoader loader = new FXMLLoader(getClass().getResource("secondWindow.fxml")); SecondWindowController controller = new SecondWindowController(student); loader.setController(controller); Parent root = loader.load(); 5. 跳转到第二个窗口,此时该窗口中的student属性就可以访问传递过来的Student对象了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值