Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Элементы управления

Элементы управления (controls) — это узлы, с которыми работает пользователь: поля ввода, флажки, списки выбора, кнопки. Все они лежат в пакете javafx.scene.control. У каждого есть метод, который возвращает текущее значение, — его и читают, когда пользователь нажимает кнопку.

Основные элементы

КлассЧто этоКак прочитать значение
LabelНадписьgetText()
TextFieldОднострочное полеgetText()
TextAreaМногострочное полеgetText()
CheckBoxФлажокisSelected()
ComboBoxВыпадающий списокgetValue()
ButtonКнопка—

Поля ввода

// src/main/java/com/example/notes/App.java — фрагмент start()
TextField titleField = new TextField();
titleField.setPromptText("Например, Купить молоко");
 
TextArea textArea = new TextArea();
textArea.setPrefRowCount(5);
textArea.setWrapText(true);

setPromptText — серая подсказка в пустом поле. setPrefRowCount(5) делает многострочное поле высотой в пять строк, а setWrapText(true) переносит длинные строки вместо горизонтальной прокрутки.

Выпадающий список и флажок

// src/main/java/com/example/notes/App.java — фрагмент start()
ComboBox<String> categoryBox = new ComboBox<>();
categoryBox.getItems().addAll("Работа", "Дом", "Идеи");
categoryBox.setValue("Идеи");
 
CheckBox importantBox = new CheckBox("Важная");

ComboBox — обобщённый класс: в угловых скобках указывают тип вариантов. getItems() возвращает список вариантов, setValue выбирает начальный. Флажок создаётся с подписью и по умолчанию снят.

Кнопка

Кнопке передают действие — лямбду, которая выполнится при нажатии. Здесь она просто печатает значения формы:

// src/main/java/com/example/notes/App.java — фрагмент start()
Button addButton = new Button("Добавить");
addButton.setOnAction(event -> {
    System.out.println("Заголовок: " + titleField.getText());
    System.out.println("Текст: " + textArea.getText());
    System.out.println("Категория: " + categoryBox.getValue());
    System.out.println("Важная: " + importantBox.isSelected());
});

Подробно о событиях — в следующем уроке.

Форма целиком

Поставим элементы в сетку из прошлого урока. BorderPane здесь создан конструктором с пятью областями в порядке: центр, верх, право, низ, лево.

// src/main/java/com/example/notes/App.java — фрагмент start()
GridPane form = new GridPane();
form.setHgap(8);
form.setVgap(8);
form.setPadding(new Insets(0, 0, 0, 16));
form.add(new Label("Заголовок:"), 0, 0);
form.add(titleField, 1, 0);
form.add(new Label("Текст:"), 0, 1);
form.add(textArea, 1, 1);
form.add(new Label("Категория:"), 0, 2);
form.add(categoryBox, 1, 2);
form.add(importantBox, 1, 3);
 
// ...правила колонок, listPane и buttons — как в прошлом уроке
 
Label header = new Label("Мои заметки");
BorderPane root = new BorderPane(form, header, null, buttons, listPane);

Флажок стоит в колонке 1, под полями, — подпись слева ему не нужна. Строка с кнопками теперь создаётся как new HBox(8, addButton, new Button("Удалить")), чтобы в ней была кнопка с действием.

Проверка

Запустите приложение, введите «Купить молоко», в текст — «2 литра, обезжиренное», выберите категорию «Дом», отметьте «Важная» и нажмите «Добавить». В терминале появится:

Заголовок: Купить молоко
Текст: 2 литра, обезжиренное
Категория: Дом
Важная: true

Частая ошибка

Если не вызвать setValue, у ComboBox нет выбранного значения и getValue() возвращает null. Код вроде categoryBox.getValue().length() падает с java.lang.NullPointerException: Cannot invoke "String.length()" because the return value of "javafx.scene.control.ComboBox.getValue()" is null. Задавайте начальное значение или проверяйте его на null перед использованием.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.