След: Создание GUI С JFC/Swing
Урок: Пишущие Слушатели События
Раздел: Реализующие Слушатели для Обычно Обрабатываемых Событий
Как Записать Слушателю Документа
Домашняя страница > Создание GUI С JFC/Swing > Пишущие Слушатели События

Как Записать Слушателю Документа

Текстовый компонент Swing использует a Document представлять его контент. События документа имеют место, когда контент документа изменяется всегда. Вы присоединяете слушателя документа текстового компонентного документа, а не текстового компонента непосредственно. См. Реализацию Документа Filterfor больше информации.

Следующий пример демонстрирует события документа на двух компонентах простого текста.

Этот снимок экрана демонстрирует вывод примера DocumentEventDemo.

Попробуйте это: 
  1. Нажмите кнопку Launch, чтобы работать, DocumentEventDemo, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.Запускает пример DocumentEventDemo
  2. Введите текстовое поле в верхнем левом из окна или текстовой области ниже текстового поля.
    Одно событие документа запускается для каждого введенного символа.
  3. Удалите текст с клавишей Backspace.
    Одно событие документа запускается для каждой введенной клавиши Backspace.
  4. Выберите текст и затем удалите его, вводя клавишу Backspace или при использовании команды клавиатуры такой как CTRL-X (сокращение).
    Одно событие документа запускается для всего удаления.
  5. Текст копии от одного текстового компонента в другие команды клавиатуры использования такой как CTRL-C (копия) и CTRL-V (вставка).
    Одно событие документа запускается для всей операции вставки независимо от длины вставляемого текста. Если текст выбирается в целевом текстовом компоненте прежде, чем команда вставки будет дана, дополнительное событие документа запускается, потому что выбранный текст удаляется сначала.

Можно найти код демонстрационного примера в DocumentEventDemo.java. Вот код обработки событий документа демонстрационного примера:

public class DocumentEventDemo ... {
    ...//where initialization occurs:
    textField = new JTextField(20);
    textField.addActionListener(new MyTextActionListener());
    textField.getDocument().addDocumentListener(new MyDocumentListener());
    textField.getDocument().putProperty("name", "Text Field");

    textArea = new JTextArea();
    textArea.getDocument().addDocumentListener(new MyDocumentListener());
    textArea.getDocument().putProperty("name", "Text Area");
    ...

class MyDocumentListener implements DocumentListener {
    String newline = "\n";
 
    public void insertUpdate(DocumentEvent e) {
        updateLog(e, "inserted into");
    }
    public void removeUpdate(DocumentEvent e) {
        updateLog(e, "removed from");
    }
    public void changedUpdate(DocumentEvent e) {
        //Plain text components do not fire these events
    }

    public void updateLog(DocumentEvent e, String action) {
        Document doc = (Document)e.getDocument();
        int changeLength = e.getLength();
        displayArea.append(
            changeLength + " character" +
            ((changeLength == 1) ? " " : "s ") +
            action + doc.getProperty("name") + "." + newline +
            "  Text length = " + doc.getLength() + newline);
    }
}

Слушатели документа не должны изменить содержание документа; изменение уже полно к тому времени, когда слушатель уведомляется относительно изменения. Вместо этого запишите пользовательский документ, который переопределяет insertString или remove методы, или оба. См. Прислушивание к Изменениям на Документе для деталей.

API Слушателя Документа

Интерфейс DocumentListener

DocumentListener не имеет никакого адаптера class.

Метод Цель
changedUpdate (DocumentEvent) Вызванный, когда стиль части текста в слушаемом изменения документа. Этот вид события запускается только от a StyledDocument — a PlainDocument не запускает эти события.
insertUpdate (DocumentEvent) Вызванный, когда текст вставляется в слушаемый документ.
removeUpdate (DocumentEvent) Вызванный, когда текст удаляется из слушаемого документ.

Интерфейс DocumentEvent

Каждый метод события документа передают объект, который реализует DocumentEvent интерфейс. Как правило, это - экземпляр DefaultDocumentEvent, определенный в AbstractDocument.

Метод Цель
Документ getDocument () Возвращает документ, который запустил событие. Отметьте что DocumentEvent интерфейс не наследовался от EventObject. Поэтому, это не наследовалось getSource метод.
интервал getLength () Возвращает длину изменения.
интервал getOffset () Возвращает расположение в пределах документа первого измененного символа.
ElementChange getChange (Элемент) Возвраты детализируют о том, что элементы в документе изменили и как. ElementChange интерфейс, определенный в пределах DocumentEvent интерфейс.
EventType getType () Возвращает тип изменения, которое произошло. EventType class, определенный в пределах DocumentEvent интерфейс, который перечисляет возможные изменения, которые могут произойти на документе: вставьте текст, удалите текст, и измените стиль текста.

Примеры тот Документ Использования Слушатели

Следующая таблица приводит примеры тот документ использования слушатели.

Пример Где Описано Примечания
DocumentEventDemo Этот раздел Отчеты все события документа, которые происходят на документах и для текстового поля и для текстовой области. Один слушатель слушает и текстовые компоненты и использует клиентское свойство на документе, чтобы определить который компонент, запущенный событие.
TextComponentDemo Прислушивание к Изменениям на Документе Обновляет журнал изменений каждый раз текст в слушаемом изменения документа. Документ в этом примере поддерживает разработанный текст, таким образом, changedUpdate вызывается в этом примере. Требует этого дополнительного исходного файла: DocumentSizeFilter

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

Предыдущая страница: Как Записать Контейнерному Слушателю
Следующая страница: Как Записать Слушателю Фокуса



Spec-Zone.ru - all specs in one place