Заставить Javafx / Scenebuilder распознавать теговые поля и методы при разбиении MainController на несколько файлов? - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь поместить логи c для меню моей программы в другой файл, чтобы мой MainController не был таким большим и загроможденным. Я создал Menucontroller. java, но Scenebuilder не распознает никаких полей или методов.

Я не пытаюсь создать новый контроллер с собственным файлом f xml. Я хочу разделить логи MainControllers c, код отлично работает внутри MainController и распознается.

Я нигде не смог найти, как это сделать. Может кто-нибудь сказать мне, что соответствующие шаги, чтобы можно было использовать MenuController?

MainController. 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.

1 Ответ

2 голосов
/ 26 февраля 2020

Один файл F XML может иметь только один контроллер, поэтому @ F XML будет распознаваться только в этом контроллере. Если вы хотите sh разделить код, то вам нужно получить все элементы javafx в контроллере и затем передать их, как обычные java объекты в другой файл. например:

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


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

...