Компоненты для ввода текста
В библиотеке AWT есть два компонента для ввода текста с клавиатуры: TextField, позволяющий ввести только одну строку, и И TextArea, в который можно ввести множество строк.
Оба класса расширяют класс Textcomponent, в котором собраны их общие методы, такие как выделение текста, позиционирование курсора, получение текста.
Класс TextComponent
В классе TextComponent нет конструктора, этот класс не используется самостоятельно.
Основной метод класса — метод getText () — возвращает текст, находящийся в поле ввода, в виде строки string.
Поле ввода может быть не редактируемым, в этом состоянии текст в поле нельзя изменить с клавиатуры или мышью. Узнать состояние поля можно логическим методом isEditabieo, изменить значения в нем — методом setEditable(boolean editable).
Текст, находящийся в поле, хранится как объект класса string, поэтому у каждого символа есть индекс (у первого — индекс 0). Индекс используется для определения позиции курсора (caret) методом getCaretPosition(), для установки позиции курсора методом setcaretpositionfint ind) и для выделения текста.
Текст выделяется, как обычно, мышью или клавишами со стрелками при нажатой клавише <Shift>, но можно выделить его из программы методом select tint begin, int end). При этом помечается текст от символа с индексом begin включительно, до символа с индексом end исключительно.
Весь текст выделяет метод selectAlK). Можно отметить начало выделения методом setseiectionstart (int ind) и конец выделения методом setSelectionEnd(int ind).
Важнее все-таки не задать, а получить выделенный текст. Его возвращает метод getSeiectedText (), а начальный и конечный индекс выделения возвращают методы getSelectionStart() и getSelectionEnd().
События
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent , при изменении текста пользователем происходит событие TextEvent.
Компонент TextField
Компонент TextField — это поле для ввода одной строки текста. Ширина поля измеряется в колонках (column). Ширина колонки — это средняя ширина символа в шрифте, которым вводится текст. Нажатие клавиши <Enter> заканчивает ввод и служит сигналом к началу обработки введенного текста, т. е. при этом происходит событие ActionEvent.
В классе четыре конструктора:
- TextField () — создает пустое поле шириной в одну колонку;
- TextField (int columns) — создает пустое поле с числом колонок columns;
- TextField (string text) — создает поле с текстом text;
- TextField(String text, int columns) — создает поле с текстом text и числом колонок columns.
К методам, унаследованным от класса TextComponent, добавляются еще методы getColumns() и setColumns(int col).
Интересная разновидность поля ввода — поле для ввода пароля. В таком поле вместо вводимых символов появляется какой-нибудь особый эхо-символ, чаще всего звездочка, чтобы пароль никто не подсмотрел через плечо.
Данное поле ввода получается выполнением метода setEcnoCnar(char echo). Аргумент echo — это символ, который будет появляться в поле. Проверить, установлен ли эхо-символ, можно логическим методом echoCharisSeto, получить эхо-символ — методом getEchoChar ().
Чтобы вернуть поле ввода в обычное состояние, достаточно выполнить метод setEchoChar(0).
События
Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent , при изменении текста пользователем происходит событие TextEvent, а при нажатии на клавишу <Enter> — событие ActionEvent.
Компонент TextArea
Компонент TextArea — это область ввода с произвольным числом строк. Нажатие клавиши <Enter> просто переводит курсор в начало следующей строки. В области ввода могут быть установлены линейки прокрутки, одна или обе.
Основной конструктор класса
TextArea(String text, int rows, int columns, int scrollbars)
создает область ввода с текстом text, числом видимых строк rows, числом колонок columns, и заданием полос .прокрутки scrollbars одной из четырех констант: SCROLLBARS_NONE, SCROLLBARS_HORIZONTAL_ONLY , SCROLLBARS_VERTICAL_ONLY, SCROLLBARS_BOTH.
Остальные конструкторы задают некоторые параметры по умолчанию:
- TextArea (String text, int rows, int columns) — присутствуют обе полосы прокрутки ;
- TextArea (int rows, int columns) — в поле пустая строка ;
- TextArea (string text) — размеры устанавливает контейнер;
- TextArea () — конструктор по умолчанию.
Среди методов класса TextArea наиболее важны методы:
- append (string text) , добавляющий текст text в конец уже введенного текста;
- insert (string text, int pos) , вставляющий текст в указанную позицию pos;
- replaceRange (String text, int begin, int end), удаляющий текст начиная с индекса begin включительно по end исключительно, и помещающий вместо него текст text.
Другие методы позволяют изменить и получить количество видимых строк.
События
Кроме Событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent , при изменении текста пользователем происходит событие TextEvent.
В листинге 10.3 создаются три поля: tf1, tf2, tf3 для ввода имени пользователя, его пароля и заказа, и не редактируемая область ввода, в которой накапливается заказ. В поле ввода пароля tf2 появляется эхо-символ *.
Листинг 10.3. Поля ввода
import j ava.awt.*;
import j ava.awt.event.*;
class TextTest extends Frame{
TextTesttString s){
super(s);
setLayout(null);
setFont(new Font(«Serif», Font.PLAIN, 14));
Label 11 = new Label(«Ваше имя:», Label.RIGHT);
11.setBounds(20, 30, 70, 25); add(11);
Label 12 = new Label(«Пароль:», Label.RIGHT);
12.setBounds(20, 60, 70, 25); add(12);
TextField tfl = new TextField(30) ;
tf1.setBounds(100, 30, 160, 25); add(tfl);
TextField tf2 = new TextField(30);
tf2.setBounds(100, 60, 160, 25);
add(tf2); tf2.setEchoChar(‘*’);
TextField tf3 = new TextField(«Введите сюда Ваш заказ», 30);
tf3.setBounds(10, 100, 250, 30); add(tf3);
TextArea ta = new TextArea(«Ваш заказ:», 5, 50,
TextArea.SCROLLBARS_NONE);
ta.setEditable(false);
ta.setBounds(10, 150, 250, 140); add(ta);
Button bl = new Button(«Применить»);
Ы.setBounds(280, 180, 100, 30); add(bl);
Button b2 = new Button(«Отменить»);
Ь2.setBounds(280, 220, 100, 30); add(b2);
Button b3 = new Button(«Выйти»);
ЬЗ.setBounds(280, 260, 100, 30); add(b3);
setSize(400, 300); setVisible(true);
public static void main(String[] args){
Frame f = new TextTest(» Поля ввода»);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ev){
System.exit(0);
}
});
}
}