java - 将 MainController 拆分为多个文件时,让 Javafx/Scenebuilder 识别标记的字段和方法?
问题描述
我试图将程序菜单栏的逻辑放在另一个文件中,这样我的 MainController 就不会那么大和混乱。我创建了 Menucontroller.java 但 Scenebuilder 无法识别任何字段或方法。
我不是想用自己的 fxml 文件创建一个新的控制器。我想拆分我的 MainControllers 逻辑,代码在 MainController 中运行良好并被识别。
我无法在任何地方找到如何做到这一点。有人可以告诉我适当的步骤是什么,以便可以使用 MenuController 吗?
主控制器.java:
public class MainController {
@FXML
private void calculate() {
System.out.println(""Works.)
}
MenuController.java: ^通过在 Scenebuilder 中将计算分配为按钮的操作来识别和工作。
package application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
public class MenuController {
@FXML MenuBar fxMenuBar;
@FXML Menu fxFileMenu;
@FXML MenuItem fxExitItem;
@FXML Menu fxEditMenu;
@FXML Menu fxHelpMenu;
@FXML
private void exit(ActionEvent fxExitItem) {
System.out.println("Exit function called.");
}
}
^这不是。在 Scenebuilder 中,我在退出功能的操作字段中没有得到提示,在菜单项的 ID 字段中也没有任何提示来分配 fxVariables。
解决方案
一个 FXML 文件只能有一个控制器,因此 @FXML 只能在那个控制器中被识别。如果您希望拆分代码,则必须获取控制器中的所有 javafx 元素,然后像普通 java 对象一样将它们传递给另一个文件。例如:
public class MainController {
@FXML MenuBar bar;
@FXML Menu menu;
@FXML
public void initialize(){
MenuController mc = new MenuController(bar, menu);
}
}
推荐阅读
- clojurescript - Figwheel 可重载代码与 atom 作为本地(词法)状态?
- php - PHPMAILER 试图使图像输入多个
- angular - 无法用数据填充编辑表单
- r - 使用表格的管道格式渲染 Rmd 文件
- javascript - 为什么我的 fetch 命令没有将正文传递给 AWS API Gateway?
- reactjs - 在 componentDidMount 中反应 setState 不起作用
- shell - 如何检查是否存在多个子文件夹
- c# - 使用 Credentials.FromSessionAsync() 伪造 API NullReferenceException
- asp.net-core - 获取应用程序基础 URL .net Core
- regex - sed: -e 表达式 #1, char 52: 无效的范围结束