oracle.com/javase/tutorial/uiswing/components/textfield.html">How to Use Text Fields in
The Java Tutorial. JTextField
is intended to be source-compatible with java.awt.TextField
where it is reasonable to do so. This component has capabilities not found in the java.awt.TextField
class. The superclass should be consulted for additional capabilities.
JTextField
has a method to establish the string used as the command string for the action event that gets fired. The java.awt.TextField
used the text of the field as the command string for the ActionEvent
. JTextField
will use the command string set with the setActionCommand
method if not null
, otherwise it will use the text of the field as a compatibility with java.awt.TextField
.
The method setEchoChar
and getEchoChar
are not provided directly to avoid a new implementation of a pluggable look-and-feel inadvertently exposing password characters. To provide password-like services a separate class JPasswordField
extends JTextField
to provide this service with an independently pluggable look-and-feel.
The java.awt.TextField
could be monitored for changes by adding a TextListener
for TextEvent
's. In the JTextComponent
based components, changes are broadcasted from the model via a DocumentEvent
to DocumentListeners
. The DocumentEvent
gives the location of the change and the kind of change if desired. The code fragment might look something like:
DocumentListener myListener = ??; JTextField myArea = ??; myArea.getDocument().addDocumentListener(myListener);
The horizontal alignment of JTextField
can be set to be left justified, leading justified, centered, right justified or trailing justified. Right/trailing justification is useful if the required size of the field text is smaller than the size allocated to it. This is determined by the setHorizontalAlignment
and getHorizontalAlignment
methods. The default is to be leading justified.
How the text field consumes VK_ENTER events depends on whether the text field has any action listeners. If so, then VK_ENTER results in the listeners getting an ActionEvent, and the VK_ENTER event is consumed. This is compatible with how AWT text fields handle VK_ENTER events. If the text field has no action listeners, then as of v 1.3 the VK_ENTER event is not consumed. Instead, the bindings of ancestor components are processed, which enables the default button feature of JFC/Swing to work.
Customized fields can easily be created by extending the model and changing the default model provided. For example, the following piece of code will create a field that holds only upper case characters. It will work even if text is pasted into from the clipboard or it is altered via programmatic changes.
public class UpperCaseField extends JTextField { public UpperCaseField(int cols) { super(cols); } protected Document createDefaultModel() { return new UpperCaseDocument(); } static class UpperCaseDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str == null) { return; } char[] upper = str.toCharArray(); for (int i = 0; i < upper.length; i++) { upper[i] = Character.toUpperCase(upper[i]); } super.insertString(offs, new String(upper), a); } } }
Warning: Swing is not thread safe. For more information see Swing's Threading Policy.
Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeans™ has been added to the java.beans
package. Please see {@link java.beans.XMLEncoder}.
@beaninfo attribute: isContainer false description: A component which allows for the editing of a single line of text.
@author Timothy Prinzing
@see #setActionCommand
@see JPasswordField
@see #addActionListener