Введение в программирование

       

Текстовые компоненты


Текстовые компоненты предназначаются для ввода и отображения строк.

Библиотека JDK предоставляет следующие классы текстовых компонентов:

  • java.awt.TextArea - текстовая область.
  • java.awt.TextField - текстовое поле, называемое также полем ввода.
  • javax.swing.JTextField - текстовое поле.
  • javax.swing.JPasswordField - текстовое поле, предназначаемое для ввода пароля.
  • javax.swing.JTextArea - текстовая область.
  • javax.swing.JEditorPane - панель редактора, позволяющая отображать как текстовые, так и графические данные, а также применять различное форматирование текста.
  • javax.swing.JTextPane - текстовая панель, позволяющая отображать содержимое с использованием различных шрифтов.

Все текстовые компоненты пакета java.awt наследуются от класса TextComponent.

Все текстовые компоненты пакета javax.swing наследуются от класса JTextComponent.

Для отображения текста, который может быть изменен только программным путем, служат компоненты .Label из пакета java.awt и JLabel из пакета javax.swing.

Компонент JLabel также можно использовать и для отображения рисунков.

Большинство названий методов, предоставляемых классами TextComponent и JTextComponent для работы с текстом, совпадают. Так, для того чтобы получить строку, которая содержит весь текст, расположенный в текстовом компоненте, можно использовать метод getText, а для получения позиции ввода - метод getCaretPosition; для определения, можно ли редактировать текст, - метод isEditable, для выделения текста в указанном диапазоне - метод select, а для выделения всего текста - метод selectAll.

При каждом изменении значения текстового компонента, включая ввод каждого символа, происходит событие textValueChanged. При нажатии на клавишу Enter для текстового поля инициируется событие actionPerformed. Но при перемещении фокуса ввода событие actionPerformed не происходит.

для ввода и редактирования одной строки текста. Этот класс предоставляет ряд методов, включая следующие:

  • AddActionListener - регистрирует блок прослушивания для обработки события действия компонента "текстовое поле".
  • EchoCharIsSet - возвращает значение true в том случае, если ввод в данное текстовое поле отображается некоторым эхо-символом, скрывающим действительное значение поля.
  • GetColumns - возвращает размер данного текстового поля (количество символов).
  • GetEchoChar - возвращает эхо-символ для данного текстового поля.
  • SetEchoCharacter - устанавливает значение эхо-символа для данного текстового поля.
    Любой вводимый пользователем символ будет экранирован данным эхо-символом.
  • SetColumns - устанавливает размер текстового поля в символах.
  • SetText - определяет новое значение текстового поля.


Хотя компоненты пакета javax.swing и называются облегченными, но они предоставляют значительно большие возможности, чем традиционные текстовые компоненты пакета java.awt.

Управление текстом, отображаемым в текстовом компоненте, определяется интерфейсом Document. Этот интерфейс предназначен для определения методов работы с текстом. Интерфейс Documentреализован классом AbstractDocument.

Текст в компоненте типа JTextComponent представляется ассоциируемой с ним текстовой моделью, определяющей как содержание, так и стиль.

Фактически, текстовый компонент предоставляет доступ к:

  • модели, реализуемой на основе интерфейса Document и представляющей собой содержание документа;
  • области просмотра текстового компонента;
  • набору команд редактирования, предусмотренного для текстового компонента;
  • таблице ключей акселераторов, связанных с таблицей именованных действий.


Класс DefaultEditorKit и StyledEditorKit описывают набор именованных действий, которые можно использовать для создания на основе текстового компонента редактора текста.

В классе DefaultEditorKit определен набор предоставляемых текстовому компоненту действий, таких как перемещение курсора, выделение или вставка текста.

Например, для создания пункта меню, выполняющего форматирование выделенного диапазона текста, и изменения размера шрифта на 14p, следует записать:

menu.add(new StyledEditorKit.FontSizeAction ( "Имя пункта меню", 14));

Константы класса DefaultEditorKit описывают набор именованных действий, включая следующие:

  • BackwardAction - перемещение позиции ввода на одну позицию назад.
  • BeepAction - подача звукового сигнала.
  • BeginAction - перемещение позиции ввода на начало документа.
  • BeginParagraphAction - перемещение позиции ввода в начало абзаца.
  • BeginLineAction - перемещение позиции ввода в начало строки.
  • BeginWordAction - перемещение позиции ввода на начало текущего слова.
  • CutAction - вырезание выделенного диапазона текста и помещение его в буфер обмена.
  • CopyAction - копирование выделенного диапазона текста в буфер обмена.
  • DeleteNextCharAction - удаление следующего символа.
  • DownAction- перемещение позиции ввода на один ряд вниз.
  • DeletePrevCharAction - удаление предыдущего символа.
  • EndAction - перемещение позиции ввода в конец документа.
  • EndLineAction - перемещение позиции ввода в конец строки.
  • EndParagraphAction - перемещение позиции ввода в конец абзаца.
  • EndWordAction - перемещение позиции ввода на конец текущего слова.
  • ForwardAction - перемещение позиции ввода на один символ вперед.
  • InsertBreakAction - вставка в документ символа конца абзаца.
  • InsertTabAction - вставка символа табуляции.
  • NextWordAction - перемещение позиции ввода на начало следующего слова.
  • PageDownAction - перемещение позиции ввода на одну страницу вниз.
  • PageUpAction - перемещение позиции ввода на одну страницу вверх.
  • PasteAction - вставка содержимого буфера обмена вместо выделенного диапазона текста или перед текущей позицией ввода.
  • PreviousWordAction - перемещение позиции ввода на начало предыдущего слова.
  • ReadOnlyAction - перевод редактора в режим "только чтение".
  • SelectAllAction - выделение всего документа.
  • SelectionBackwardAction - расширение области выделения на одну позицию назад (влево).
  • SelectionBeginAction - расширение области выделения до начала документа.
  • SelectionBeginLineAction- расширение области выделения до начала текущей строки.
  • SelectionBeginParagraphAction - расширение области выделения до начала текущего абзаца.
  • SelectionBeginWordAction - расширение области выделения до начала текущего слова.
  • SelectionDownAction - расширение области выделения на одну позицию вниз.
  • SelectionEndAction - расширение области выделения до конца документа.
  • SelectionEndLineAction - расширение области выделения до конца строки.
  • SelectionEndParagraphAction- расширение области выделения до конца абзаца.
  • SelectionEndWordAction - расширение области выделения до конца текущего слова.
  • SelectionForwardAction - расширение области выделения на один символ вперед (вправо).
  • SelectionNextWordAction - расширение области выделения до начала следующего слова.
  • SelectionPreviousWordAction - расширение области выделения до начала предыдущего слова.
  • SelectionUpAction - расширение области выделения на одну позицию вверх.
  • SelectLineAction - выделение строки, в которой расположена позиция ввода.
  • SelectParagraphAction - выделение абзаца, в котором расположена позиция ввода.
  • SelectWordAction - выделение слова, в котором расположена позиция ввода.
  • UpAction - перемещение позиции ввода на одну позицию вниз.
  • WritableAction - перевод редактора в режим редактирования текста.




Для того чтобы добавить в документ строку в отформатированном виде, можно использовать метод insertS класса DefaultStyledDocument. Этот класс является подклассом класса AbstractDocumentи реализует интерфейсы Document и StyledDocument.

Интерфейс StyledDocument определяет методы для работы со стилем документа. Так, для назначения диапазону текста набора атрибутов стиля можно использовать метод setCharacter-Attributes, а для определения используемого стиля или шрифра - методы getStyle и getFont.

Атрибуты стиля определяются интерфейсом AttributeSet. Этот интерфейс реализован классом SimpleAttributeSet.

Для создания набора атрибутов стиля следует создать переменную типа SimpleAttributeSet и установить атрибуты стиля, используя методы класса

Например:

SimpleAttributeSet attrSt = new SimpleAttributeSet(); StyleConstants.setBold(attrSt, true); StyleConstants.setFontSize(attrSt, 12); StyleConstants.setForeground(attrSt, Color.red);

При добавлении строки в текстовый документ вызовом метода insertString класса Default-StyledDocument один из параметров ссылается на набор аттрибутов.

Фактически набор атрибутов стиля накладывается на диапазон текста. Если текстовый компонент содержит текст с различным форматированием, то на каждый отдельный диапазон текста должен быть "наложен" свой набор атрибутов стиля.

Для создания таблицы ключей акселераторов, используемых для текстового компонента, следует:

  1. Создать объект класса Keymap для компонента класса JTextPane.

    Например:

    JTextPane textPane; .... Keymap keymap = textPane.addKeymap("MyKeymap", textPane.getKeymap());

  2. Создать объект класса Action и установить для него действие, описанное в классе DefaultEditorKit.

    Например:

    Action action = getActionByName(DefaultEditorKit.downAction);
  3. Создать объект класса KeyStroke и установить для него значение ключа акселератора.

    Например:

    KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK);

  4. Установить связь между созданным действием и ключем акселератором.



    Например:

    keymap.addActionForKeyStroke(key, action);


Класс StyleConstants предоставляет набор методов, позволяющих определять или устанавливать значения для атрибутов форматирования.

Набор атрибутов форматирования может быть создан как объект одного из следующих классов:

  • SimpleAttributeSet .
  • AttributeSet .
  • MutableAttributeSet .


Например:

...SimpleAttributeSet[] attrs = new SimpleAttributeSet[stringForPane.length +1]; // Создание набора атрибутов: attrs[0] = new SimpleAttributeSet(); StyleConstants.setFontFamily(attrs[0], "SansSerif"); // Установка значения атрибута StyleConstants.setFontSize(attrs[0], 12); attrs[1] = new SimpleAttributeSet(attrs[0]); StyleConstants.setFontSize(attrs[1], 14); StyleConstants.setBold(attrs[1], true); // Добавление строки в документ с заданным набором // атрибутов (defaultStyleDocument1 переменная // класса, наследуемого от DefaultStyleDocument) defaultStyleDocument1.insertString( defaultStyleDocument1.length, string1, attrs[1]);


Содержание раздела