JavaFX предоставляет ряд элементов управления для ввода текста: TextField (для ввода однострочного текста), TextArea (для ввода многострочного текста) и PasswordField (для ввода пароля).
Все эти элементы управления наследуются от класса TextInputControl, который определяет базовую функциональность. Вкратце рассмотрим эту функциональность. Основные свойства:
BooleanProperty editable
: указывает, можно ли редактировать текст в поле
ObjectProperty<Font> font
: определяет шрифт
StringProperty promptText
: определяет текст-приглашение к вводу
ReadOnlyStringProperty selectedText
: определяет выделенный текст
ObjectProperty<TextFormatter<?>> textFormatter
: определяет форматировщик текста
StringProperty text
: определяет текст в поле
ReadOnlyBooleanProperty undoable
: определяет, можно ли отменить последнее изменение содержимого в поле
Некоторые из методов TextInputControl:
void appendText(String text)
: добавляет текст к содержимому элемента управления
void backward()
: перемещает курсор по тексту назад
void clear()
: определяет текст-приглашение к вводу
void copy()
: копирует выделенный текст в буфер обмена
void cut()
: удаляет выделенный текст, копируя его в буфер обмена
void deleteText(int start, int end)
: удаляет текст между двумя символами, которые имеют индексы start и end
void deselect()
: снимает выделение текста
String getText()
: возвращает введенный текст
String getText(int start, int end)
: возвращает текст между символами с индесами start и end
void insertText(int index, String text)
: вставляет текст на определенную позицию
void paste()
: вставляет текст из буфера обмена вместо выделенного текста
void redo()
: возвращает последнюю отмененную операцию
void replaceText(int start, int end, String text)
: заменяет текст
void setFont(Font value)
: устанавливает шрифт (свойство font)
void setEditable(boolean value)
: устанавливает свойство editable
void setPromptText(String value)
: устанавливает свойство promptText
void setText(String value)
: устанавливает свойство text
void setTextFormatter(TextFormatter<?> value)
: устанавливает свойство textFormatter
void undo()
: отменяет последнее изменение содержимого
Для создания однострочного текстового поля мы можем использовать один из двух его конструкторов:
TextField()
: создает пустое текстовое поле
TextField(String text)
: создает текстовое поле с некоторым начальным текстом
Большую часть функциональности TextField наследует от TextInputControl. Из собственных методов у TextField следует отметить метод
void setPrefColumnCount(int columns)
Данный метод устанавливает количество столбцов, то есть по сути размер текстового поля.
Например, используем TextField в программе:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.FlowPane; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.control.Button; import javafx.geometry.Orientation; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) throws Exception { Label lbl = new Label(); TextField textField = new TextField(); textField.setPrefColumnCount(11); Button btn = new Button("Click"); btn.setOnAction(event -> lbl.setText("Input: " + textField.getText())); FlowPane root = new FlowPane(Orientation.VERTICAL, 10, 10, textField, btn, lbl); Scene scene = new Scene(root, 250, 200); stage.setScene(scene); stage.setTitle("TextField in JavaFX"); stage.show(); } }
В данном случае при нажатии на кнопку считываем введенный в TextField текст и выводим его в элементе Label:
TextArea во многом аналогичен TextField. Он также имеет два конструктора:
TextArea()
: создает пустое текстовое поле
TextArea(String text)
: создает текстовое поле с некоторым начальным текстом
Но поскольку TextArea представляет многострочное текстовое поле, то для него мы можем управлять как количеством столбцов, так и количеством строк с помощью следующих методов:
void setPrefColumnCount(int columns) // устанавливает кол-во столбцов void setPrefRowCount(int rows) // устанавливает кол-во строк
Используем TextArea:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.FlowPane; import javafx.scene.control.Label; import javafx.scene.control.TextArea; import javafx.scene.control.Button; import javafx.geometry.Orientation; import javafx.geometry.Pos; public class Main extends Application{ public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) throws Exception { Label lbl = new Label(); TextArea textArea = new TextArea(); textArea.setPrefColumnCount(15); textArea.setPrefRowCount(5); Button btn = new Button("Click"); btn.setOnAction(event -> lbl.setText("Input: " + textArea.getText())); FlowPane root = new FlowPane(Orientation.VERTICAL, 10, 10, textArea, btn, lbl); root.setAlignment(Pos.CENTER); Scene scene = new Scene(root, 300, 250); stage.setScene(scene); stage.setTitle("TextArea in JavaFX"); stage.show(); } }