首页 > 解决方案 > 将 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。

标签: javajavafxscenebuilder

解决方案


一个 FXML 文件只能有一个控制器,因此 @FXML 只能在那个控制器中被识别。如果您希望拆分代码,则必须获取控制器中的所有 javafx 元素,然后像普通 java 对象一样将它们传递给另一个文件。例如:

public class MainController {
    @FXML MenuBar bar;
    @FXML Menu menu;


    @FXML
    public void initialize(){
        MenuController mc = new MenuController(bar, menu);
    }
}


推荐阅读