Компоненты для ввода текста

 

В библиотеке 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); 

}

}); 

}