avtransmit2.java_javafx 实现controller间的数据传递

这篇博客详细介绍了如何在JavaFX中实现不同Controller之间的通信,以完成从菜单触发在工程面板创建新项目的功能。通过MainController作为中介,实现了MenuController和ProjectController之间的数据交互。同时,还提供了一个案例,展示如何在两个独立的FXML界面之间传递数据,通过AppModel作为数据模型,实现在InputController输入内容后,ResultController显示该内容。
摘要由CSDN通过智能技术生成

avaFXController之间通信

问题背景:

最近在做毕设,需要用JavaFX做东西,无奈之前没有接触过,只得硬着头皮开始做。无奈,发现这个东西并不能找到太多的资料,在碰到菜单想要对页面进行操作时,竟然束手无策。苦思许久,google许久,总算是找到一个法子,特此庆祝一番。

问题描述

在应用的菜单新建一个工程需要在应用的工程面板新建一个TreeView。但是应用的菜单和工程面板并不是同一个Controller控制的,所以直接进行操作,显然程序运行时会报空指针异常。一下给出一个示例。

目录:

接下来给出每个文件的具体代码。

Main.java比较简单

直接附图

main.fxml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

MainController.java

public class MainController implements Initializable {

@FXML MenuController menuController;

@FXML ProjectController projectController;

@Override

public void initialize(URL location, ResourceBundle resources) {

menuController.init(this);

projectController.init(this);

}

public void addNewProject() {

//projectController.addProject();

TreeItem mRoot = new TreeItem<>("你好");

for (int i = 0; i < 4; i++) {

TreeItem item = new TreeItem("模块" + i);

for (int j = 0; j < 3; j++) {

TreeItem t = new TreeItem("功能点" + j);

item.getChildren().add(t);

}

mRoot.getChildren().add(item);

}

projectController.mTreeView.setRoot(mRoot);

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Exception in Application constructor Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) Caused by: java.lang.RuntimeException: Unable to construct Application instance: class com.example.demo.Main at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:891) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.lang.IllegalAccessException: class com.sun.javafx.application.LauncherImpl (in module javafx.graphics) cannot access class com.example.demo.Main (in module com.example.javafxtest) because module com.example.javafxtest does not export com.example.demo to module javafx.graphics at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392) at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:489) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:803) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184) ... 1 more
05-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值