Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Используя Компоненты Swing
Раздел: Как Использовать Различные Компоненты
Как Использовать Текстовые области
Домашняя страница > Создание GUI С JFC/Swing > Используя Компоненты Swing

Как Использовать Текстовые области

JTextArea class обеспечивает компонент, который выводит на экран многократные строки текста и дополнительно позволяет пользователю редактировать текст. Если Вы должны получить только одну строку ввода от пользователя, следует использовать текстовое поле. Если Вы хотите, чтобы текстовая область вывела на экран свой текст, используя многократные шрифты или другие стили, следует использовать область редактора или текстовую область. Если выведенный на экран текст имеет ограниченную длину и никогда не редактируется пользователем, используйте метку.

Многие из примеров Учебного руководства используют недоступные для редактирования текстовые области, чтобы вывести на экран вывод программы. Вот изображение вызванного примера TextDemo это позволяет Вам ввести текст, используя текстовое поле (наверху) и затем добавляет введенный текст к текстовой области (внизу).

Снимок TextDemo

Нажмите кнопку Launch, чтобы работать, TextDemo, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.

Запускает приложение TextDemo

Можно найти весь код для этой программы в TextDemo.java. Следующий код создает и инициализирует текстовую область:

textArea = new JTextArea(5, 20);
JScrollPane scrollPane = new JScrollPane(textArea); 
textArea.setEditable(false);

Эти два параметра JTextArea конструктор является подсказками относительно числа строк и столбцов, соответственно, который должна вывести на экран текстовая область. Область прокрутки, которая содержит текстовую область, обращает внимание на эти подсказки, определяя, насколько большой область прокрутки должна быть.

Без создания области прокрутки текстовая область автоматически не прокрутила бы. JScrollPane конструктор, показанный в предыдущем отрывке, устанавливает текстовую область для того, чтобы просмотреть в области прокрутки, и определяет, что полосы прокрутки области прокрутки должны быть видимыми при необходимости. См., Как Использовать Области прокрутки, если Вы хотите дополнительную информацию.

Текстовые области доступны для редактирования по умолчанию. Код setEditable(false) делает текстовую область недоступной для редактирования. Это является все еще выбираемым, и пользователь может скопировать данные с этого, но пользователь не может изменить содержание текстовой области непосредственно.

Следующий код добавляет текст к текстовой области. Отметьте, что текстовая система использует '\n' символ внутренне, чтобы представить новые строки; для деталей см. документацию API для DefaultEditorKit.

private final static String newline = "\n";
...
textArea.append(text + newline);

Если пользователь не переместил каре (точка вставки), щелкая или притягивая текстовую область, текстовая область автоматически прокручивает так, чтобы добавленный текст был видим. Можно вынудить текстовую область прокрутить к нижней части, перемещая каре до конца текстовой области после звонка append:

textArea.setCaretPosition(textArea.getDocument().getLength());

Настройка Текстовых областей

Можно настроить текстовые области несколькими способами. Например, хотя данная текстовая область может вывести на экран текст только в одном шрифте и цвете, можно установить, какой шрифт и красят это использованием. Эта опция настройки может быть выполнена на любом компоненте. Можно также определить, как текстовая область обертывает строки и число символов на вкладку. Наконец, можно использовать методы что JTextArea class наследовался от JTextComponent class, чтобы установить свойства, такие как каре, поддерживайте для того, чтобы перетащить, или покрасить выбор.

Следующий код, взятый от TextSamplerDemo.java демонстрирует, как инициализировать доступную для редактирования текстовую область. Текстовая область использует указанный курсивный шрифт, и обертывает строки между словами.

JTextArea textArea = new JTextArea(
    "This is an editable JTextArea. " +
    "A text area is a \"plain\" text component, " +
    "which means that although it can display text " +
    "in any font, all of the text is in the same font."
);
textArea.setFont(new Font("Serif", Font.ITALIC, 16));
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);

По умолчанию текстовая область не обертывает строки, которые являются слишком длинными для области дисплея. Вместо этого это использует одну строку для всего текста между символами новой строки и — если текстовая область в пределах области прокрутки — позволяет себе быть прокрученным горизонтально. Этот пример включает строку, переносящуюся со звонком setLineWrap метод и затем вызывает setWrapStyleWord метод, чтобы указать, что текстовая область должна обернуть строки на границах слова, а не на символьных границах.

Чтобы обеспечить прокрутку возможности, пример помещает текстовую область в область прокрутки.

JScrollPane areaScrollPane = new JScrollPane(textArea);
areaScrollPane.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
areaScrollPane.setPreferredSize(new Dimension(250, 250));

Вы, возможно, заметили что JTextArea конструктор, используемый в этом примере, не определяет число строк или столбцов. Вместо этого код ограничивает размер текстовой области, устанавливая привилегированный размер области прокрутки.

Другой Пример: TextAreaDemo

TextAreaDemo пример начинает доступную для редактирования текстовую область со специальной функции — функция завершения слова. Поскольку пользователь вводит слова, программа предлагает, чтобы подсказки завершили слово всякий раз, когда словарь программы содержит слово, которое запускается с того, что было введено. Вот изображение TextAreaDemo приложение.

Снимок TextAreaDemo

Нажмите кнопку Launch, чтобы работать, TextAreaDemo, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.

Запускает Приложение TextAreaDemo

Можно найти весь код для этой программы в TextAreaDemo.java.

Этот пример обеспечивает емкость прокрутки для текстовой области с политикой полосы прокрутки значения по умолчанию. По умолчанию вертикальная полоса прокрутки только появляется, когда область дисплея полностью заполнена текстом и нет никакой комнаты, чтобы добавить новые слова. Можно обеспечить область прокрутки этого типа со следующим кодом:

  textArea.setWrapStyleWord(true);
  jScrollPane1 = new JScrollPane(textArea);

Как упомянуто выше, текстовая область доступна для редактирования. Можно играть с текстовой областью, вводя и вставляя текст, или удаляя некоторые части текста или всего контента. Также попытайтесь использовать стандартные привязки клавиш для того, чтобы отредактировать текст в пределах текстовой области.

Теперь исследуйте, как функция завершения слова реализуется. Тип одним словом как "Swing" или "особенный". Как только Вы ввели "коротковолновый", программа показывает возможному завершению "луг", выделенный в голубом. Нажатие Входит, чтобы принять завершение или продолжать вводить.

Следующий код добавляет слушателя документа документа текстовой области:

  textArea.getDocument().addDocumentListener(this);

Когда Вы начинали вводить слово, insertUpdate метод проверяет, содержит ли словарь программы введенный префикс. Как только завершение для префикса находится, звонок invokeLater метод представляет задачу для того, чтобы изменить документ позже. Важно помнить, что невозможно изменить документ изнутри уведомления о событии документа, иначе Вы получите исключение. Исследуйте следующий код ниже.

String prefix = content.substring(w + 1).toLowerCase();
int n = Collections.binarySearch(words, prefix);
if (n < 0 && -n <= words.size()) {
    String match = words.get(-n - 1);
    if (match.startsWith(prefix)) {
        // A completion is found
        String completion = match.substring(pos - w);
        // We cannot modify Document from within notification,
        // so we submit a task that does the change later
        SwingUtilities.invokeLater(
            new CompletionTask(completion, pos + 1));
    }
} else {
    // Nothing found
    mode = Mode.INSERT;
}

Код, показанный полужирным, иллюстрирует, как выбор создается. Каре сначала устанавливается до конца полного слова, затем попятилось к позиции после введенного последнего знака. moveCaretPosition метод не только перемещает каре в новую позицию, но также и выбирает текст между этими двумя позициями. Задача завершения реализуется со следующим кодом:

  private class CompletionTask implements Runnable {
        String completion;
        int position;
        
        CompletionTask(String completion, int position) {
            this.completion = completion;
            this.position = position;
        }
        
        public void run() {
            textArea.insert(completion, position);
            textArea.setCaretPosition(position + completion.length());
            textArea.moveCaretPosition(position);
            mode = Mode.COMPLETION;
        }
    }

API Текстовой области

Следующие таблицы приводят обычно используемый JTextArea конструкторы и методы. Другие методы, которые Вы, вероятно, вызовете, определяются в JTextComponent, и перечисленный в текстовом Компонентном API.

Вы могли бы также вызвать методы на текстовую область, которую это наследовало от ее других предков, такой как setPreferredSize, setForeground, setBackground, setFont, и так далее. См. Класс JComponent для таблиц обычно используемых наследованных методов.

API для того, чтобы использовать текстовые области включает следующие категории:

Установка или Получение Содержания
Метод или Конструктор Цель
JTextArea ()
JTextArea (Строка)
JTextArea (Строка, интервал, интервал)
JTextArea (интервал, интервал)
Создает текстовую область. Когда существующий, String параметр содержит начальный текст. int параметры определяют требуемый width в столбцах и height в строках, соответственно.
освободите setText (Строка)
Представьте getText в виде строки ()
(определенный в JTextComponent)
Наборы или получают текст, выведенный на экран текстовой областью.
Точная настройка Появление Текстовой области
Метод Цель
освободите (булев) setEditable
булев isEditable ()
(определенный в JTextComponent)
Наборы или указывают, может ли пользователь отредактировать текст в текстовой области.
освободите setColumns (интервал);
интервал getColumns ()
Наборы или получают число столбцов, выведенных на экран текстовой областью. Это - действительно только подсказка для того, чтобы вычислить привилегированный width области.
освободите setRows (интервал);
интервал getRows ()
Наборы или получают число строк, выведенных на экран текстовой областью. Это - подсказка для того, чтобы вычислить привилегированный height области.
интервал setTabSize (интервал) Определяет номер символов, которым вкладка эквивалентна.
интервал setLineWrap (булев) Наборы, обертываются ли строки, если они слишком длинные, чтобы соответствовать в пределах выделенного width. По умолчанию это свойство является ложью, и строки не обертываются.
интервал setWrapStyleWord (булев) Наборы, могут ли строки быть обернуты в пробеле (границы слова) или в каком-либо символе. По умолчанию это свойство является ложью, и строки могут быть обернуты (если обертывание строки включается) в любом символе.
Реализация Функциональности Текстовой области
Метод Цель
освободите selectAll ()
(определенный в JTextComponent)
Выбирает все символы в текстовой области.
пусто добавьте (Строка) Добавляет указанный текст до конца текстовой области.
пустая вставка (Строка, интервал) Вставляет указанный текст в указанной позиции.
освободите replaceRange (Строка, интервал, интервал) Заменяет текст между обозначенными позициями с указанной строкой.
интервал getLineCount ()
интервал getLineOfOffset (интервал)
интервал getLineStartOffset (интервал)
интервал getLineEndOffset (интервал)
Утилиты для того, чтобы найти номер строки или позицию начала или конец указанной строки.

Примеры То Использование Текстовые области

Эта таблица приводит примеры, которые используют текстовые области и точки туда, где те примеры описываются.

Пример Где Описано Примечания
TextDemo Этот раздел Приложение, которое добавляет вводимый пользователем текст к текстовой области.
TextAreaDemo Этот раздел Приложение, у которого есть текстовая область с функцией завершения слова.
TextSamplerDemo Используя текстовые Компоненты Использование один из каждого текста Swing компоненты.
HtmlDemo Как Использовать HTML в Компонентах Swing Текстовая область, которая позволяет пользователю ввести код HTML, который будет выведен на экран в метке.
BasicDnD Введение в DnD Демонстрирует встроенную функциональность перетаскивать-и-отбрасывать нескольких компонентов Swing, включая текстовые области.
FocusConceptsDemo Как Использовать Подсистему Фокуса Демонстрирует, как работы фокуса, используя несколько компонентов, которые включают текстовую область.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать Таблицы
Следующая страница: Как Использовать Текстовые поля