IDE не может узнать о том, как вы настраиваете контроллер где-то в своем Java-коде. По этой причине функции автозаполнения и т.п. отключены. Тот факт, что среда IDE отображает подобные «проблемы», в этом случае вызывает сожаление, но они могут указывать на проблему, которая может быть распознана только во время выполнения.
В вашем случае, если у вас нет опечаток вВаш fxml, можно игнорировать эти предупреждения.
Конечно, вы можете просто временно добавить атрибут fx:controller
при редактировании fxml и удалить его, когда закончите.
Другой способдля решения этой проблемы было бы указать атрибут fx:controller
в fxml и задать свойство controllerFactory
вместо свойства controller
для загрузчика. Мне не очень нравится такой подход:
<GridPane fx:id="gridpane" alignment="CENTER" vgap="50" hgap="50" xmlns:fx="http://javafx.com/fxml" fx:controller="task01.MainMenuController">
...
public MainMenuController() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("mainmenu.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setControllerFactory(clazz -> {
if (!clazz.isInstance(this)) {
throw new IllegalArgumentException(String.format("class of controller (%s) not assignable to class specified in fxml (%s)", this.getClass().getName(), clazz.getName()));
}
return this;
});
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
Если вы не хотите проверять совместимость назначений между типом контроллера, указанным в fxml, и типом контроллера, который вы указали,controllerFactory
можно было бы упростить до clazz -> this
.
Если вы хотите использовать этот подход для нескольких классов, я настоятельно рекомендую создать класс для фабрики контроллеров, чтобы избежать повторений, предполагая, что вы хотите выполнить проверку .. .