A Swing text component uses a 
Document to represent its content. Document events occur when the content of a document changes in any way. You attach a document listener to a text component's document, rather than to the text component itself. See 
Implementing a Document Filterfor more information.
The following example demonstrates document events on two plain text components.


CTRL-X (cut).CTRL-C (copy) and CTRL-V (paste).You can find the demo's code in 
DocumentEventDemo.java. Here is the demo's document event handling code:
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);
    }
}
Document listeners should not modify the contents of the document; The change is already complete by the time the listener is notified of the change. Instead, write a custom document that overrides the insertString or remove methods, or both. See 
Listening for Changes on a Document for details.
The DocumentListener Interface
DocumentListener has no adapter class.
| Method | Purpose | 
|---|---|
| changedUpdate(DocumentEvent) | Called when the style of some of the text in the listened-to document changes. This sort of event is fired only from a StyledDocument— aPlainDocumentdoes not fire these events. | 
| insertUpdate(DocumentEvent) | Called when text is inserted into the listened-to document. | 
| removeUpdate(DocumentEvent) | Called when text is removed from the listened-to document. | 
Each document event method is passed an object that implements the DocumentEvent interface. Typically, this is an instance of 
DefaultDocumentEvent, defined in AbstractDocument.
| Method | Purpose | 
|---|---|
| Document getDocument() | Returns the document that fired the event. Note that the DocumentEventinterface does not inherit fromEventObject. Therefore, it does not inherit thegetSourcemethod. | 
| int getLength() | Returns the length of the change. | 
| int getOffset() | Returns the location within the document of the first character changed. | 
| ElementChange getChange(Element) | Returns details about what elements in the document have changed and how. ElementChangeis an interface defined within theDocumentEventinterface. | 
| EventType getType() | Returns the type of change that occurred. EventTypeis a class defined within theDocumentEventinterface that enumerates the possible changes that can occur on a document: insert text, remove text, and change text style. | 
The following table lists the examples that use document listeners.
| Example | Where Described | Notes | 
|---|---|---|
| DocumentEventDemo | This section | Reports all document events that occur on the documents for both a text field and a text area. One listener listens to both text components and uses a client property on the document to determine which component fired the event. | 
| TextComponentDemo | Listening for Changes on a Document | Updates a change log every time text in the listened-to document changes. The document in this example supports styled text, so changedUpdategets called in this example. Requires this additional source file:DocumentSizeFilter |