The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available.
See Java Language Changes for a summary of updated language features in Java SE 9 and subsequent releases.
See JDK Release Notes for information about new features, enhancements, and removed or deprecated options for all JDK releases.
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 — a PlainDocument does 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 DocumentEvent interface does not inherit from EventObject . Therefore, it does not inherit the getSource method. |
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.
ElementChange is an interface defined within the DocumentEvent interface. |
EventType getType() | Returns the type of change that occurred.
EventType is a class defined within the DocumentEvent interface 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 changedUpdate gets called in this example. Requires this additional source file: DocumentSizeFilter |