С Введение в F XML:
@FXML
Обратите внимание, что в предыдущих примерах поля элементов контроллера и обработчик событий методы были объявлены как publi c, поэтому они могут быть установлены или вызваны загрузчиком. На практике это не часто является проблемой, поскольку контроллер обычно виден только загрузчику F XML, который его создает. Однако для разработчиков, которые предпочитают более ограниченную видимость полей контроллера или методов-обработчиков, можно использовать аннотацию javafx.fxml.FXML
. Эта аннотация помечает защищенного или частного члена класса как доступный для F XML. Если аннотируемый класс находится в именованном модуле, модуль, содержащий этот класс, должен open
содержащий пакет по крайней мере для модуля javafx.fxml
.
Другими словами, аннотация @FXML
только требуется , если поле или метод не является общедоступным c (т. е. защищенным, закрытым или закрытым), но должен быть доступен для F XML. В контексте F XML нет никакой разницы между полем c или методом publi * без (или даже с) @FXML
аннотацией и полем / методом c не публикуемым способом с указанной аннотацией. Единственное отличие в общем случае заключается в видимости поля / метода для другого кода.
При этом обычно считается хорошей практикой делать что-то настолько видимым, насколько это необходимо. В поле, введенном F XML, обычно нет причин для публикации c, а также метод обработчика событий - это детали реализации.
Обратите внимание, что аннотация @FXML
ничего не делает особенный на уровне языка. Наличие аннотации просто говорит FXMLLoader
, что можно попытаться рефлексивно получить доступ к полю или методу, даже если он не опубликован c. Это также хороший совет для разработчика, что поле или метод обрабатывается F XML (например, F XML -инжированные поля практически никогда не должны инициализироваться или переназначаться вручную).