webprogr.ru Новости

RSS

{{toodo.preview}}

...
{{toodo.name}}

{{toodo.preview}}

далее..

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

смотреть..

toodo.name

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

перейти...

{{toodo.preview}}

...
{{toodo.name}}

{{toodo.preview}}

далее..

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

смотреть..

toodo.name

{{toodo.preview}}

{{toodo.name}}

{{toodo.preview}}

перейти...


Последние новости

FXML (разметка интерфейса)

FXML – XML-разметка для описания UI в JavaFX. Позволяет отделить описание интерфейса от программной логики. Структура FXML-файла отражает иерархию узлов сцены, что делает код понятным и наглядным.
Контроллер: Каждый FXML обычно связан с классом-контроллером, где реализована логика интерфейса. Контроллер обрабатывает события, изменяет элементы UI, связывает их с бизнес-логикой.
Загрузка FXML: Фреймворк предоставляет класс FXMLLoader для загрузки разметки и автоматического создания объектов UI. В FXML указываются fx:id для элементов и fx:controller для привязки к контроллеру.


Пояснение:
Использование FXML значительно упрощает разработку сложного интерфейса. Вместо того чтобы создавать каждую кнопку и панель в коде Java, вы можете описать их в виде XML. Например, простой FXML-файл может выглядеть так (фрагмент):
<AnchorPane xmlns:fx="http://javafx.com/fxml&quot; fx:controller="com.example.MyController">
<Button fx:id="myButton" text="Нажми меня" layoutX="100" layoutY="80" onAction="#handleButtonAction"/>
<Label fx:id="statusLabel" layoutX="100" layoutY="120" text="..." />
</AnchorPane>
Здесь корневой узел – AnchorPane, внутри него объявлены Button и Label с заданными свойствами (текст, положение). Атрибут fx:controller указывает, какой класс является контроллером для данного интерфейса. В контроллере MyController будут методы и поля, связанные с этими элементами:
public class MyController {
@FXML private Button myButton;
@FXML private Label statusLabel;
@FXML
private void handleButtonAction(ActionEvent event) {
statusLabel.setText("Кнопка нажата!");
}
}
Директива @FXML перед полем дает возможность FXML Loader-у внедрить соответствующий объект UI (по fx:id) прямо в контроллер после загрузки разметки. Метод с аннотацией @FXML и именем, указанным в onAction (handleButtonAction) будет привязан как обработчик события нажатия кнопки.
Чтобы подгрузить FXML в приложении, используется класс FXMLLoader. Например, в методе start() можно написать:
Parent root = FXMLLoader.load(getClass().getResource("/com/example/MyView.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
Это прочитает файл разметки, создаст все упомянутые там объекты (AnchorPane, Button, Label…) и свяжет их с контроллером. В результате myButton и statusLabel в контроллере уже будут указывать на созданные элементы, и обработчики (например, onAction) будут настроены.
Современные рекомендации по FXML: держать логику контроллера минимальной – только для обработки UI-событий и вызова методов модели. Старайтесь не «программировать интерфейс» в контроллере (для этого есть FXML), а фокусироваться на реакции на действия пользователя. Хорошей практикой является разбивка интерфейса на несколько FXML и контроллеров (для отдельных окон или крупных компонентов), чтобы код каждого контроллера был проще и отвечал за свой участок UI.
Если приложение модульное (Module Path, Java 9+), нужно помнить про модульные требования: контроллер, который загружается через FXML, создается рефлексивно. Поэтому пакет, в котором он находится, должен быть открыт модулю javafx.fxml. Например, в module-info.java потребуется строка opens com.example.controllers to javafx.fxml;. Без этого JavaFX не сможет подключиться к приватным полям/методам контроллера, и загрузка FXML завершится с ошибкой. В Maven-проектах, как правило, FXML файлы кладут в ресурсный каталог, а их пути указывают через ресурсные URL, как выше (getResource("/com/example/..")).
Рейтинг@Mail.ru