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 |