JavaFX FXML - Получение MenuItem с использованием fx: id - PullRequest
0 голосов
/ 13 июня 2018

Я строю графический интерфейс Java-приложения, используя Scene Builder.Для каждого элемента я дал ему fx:id, чтобы я мог обратиться к ним позже.Мне нужно использовать setOnAction() на многих его элементах, таких как:

((Button)mainPane.lookup("#submitButton")).setOnAction(e->{
    // ... code triggered when button is pressed ...
});

. Это работает для большинства элементов, кроме MenuItem s.Когда я пытаюсь выполнить следующее, Eclipse говорит мне: «Невозможно привести от Node к MenuItem», и это не работает.

// Does not work
((MenuItem)mainPane.lookup("#about")).setOnAction(e->{
    // ... take user to about page ...
});

Я вижу, что MenuItem расширяет только Object, поэтомунельзя кастовать из Node.Как я могу вернуть MenuItem, используя fx:id?

Примечание: я знаю, что могу использовать On Action FXML, но я хочу использовать лямбда-функции и сохранить код обработки событий в том же стиле.

1 Ответ

0 голосов
/ 13 июня 2018

((Button)mainPane.lookup("#submitButton")) <- ужасная идея. </p>

Если у ваших узлов есть fx:id.Вы должны сделать @FXML YourNodeType yourNodeFx:Id;

Пример: в FXML ваш Button's fx:id="submitButton".Ваш Controller код должен выглядеть следующим образом:

@FXML Button submitButton;

В вашем методе инициализации вы должны сделать:

submitButton.setOnAction(event ->{
    //Your code here!
});
...