JFormattedTextField (Java Platform SE 6)
javax.swing
Class JFormattedTextField
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.text.JTextComponent javax.swing.JTextField javax.swing.JFormattedTextField
- All Implemented Interfaces:
- ImageObserver, MenuContainer, Serializable, Accessible, Scrollable, SwingConstants
public class JFormattedTextField
- extends JTextField
JFormattedTextField extends JTextField adding
support for formatting arbitrary values, as well as retrieving a particular
object once the user has edited the text. The following illustrates
configuring a JFormattedTextField to edit dates:
JFormattedTextField ftf = new JFormattedTextField(); ftf.setValue(new Date());
Once a JFormattedTextField has been created, you can
listen for editing changes by way of adding
a PropertyChangeListener and listening for
PropertyChangeEvents with the property name value.
JFormattedTextField allows
configuring what action should be taken when focus is lost. The possible
configurations are:
Value | Description |
|---|---|
| JFormattedTextField.REVERT | Revert the display to match that of getValue,
possibly losing the current edit.
|
| JFormattedTextField.COMMIT | Commits the current value. If the value being edited
isn't considered a legal value by the
AbstractFormatter that is, a
ParseException is thrown, then the value
will not change, and then edited value will persist.
|
| JFormattedTextField.COMMIT_OR_REVERT | Similar to COMMIT, but if the value isn't
legal, behave like REVERT.
|
| JFormattedTextField.PERSIST | Do nothing, don't obtain a new
AbstractFormatter, and don't update the value.
|
JFormattedTextField.COMMIT_OR_REVERT,
refer to setFocusLostBehavior(int) for more information on this.
JFormattedTextField allows the focus to leave, even if
the currently edited value is invalid. To lock the focus down while the
JFormattedTextField is an invalid edit state
you can attach an InputVerifier. The following code snippet
shows a potential implementation of such an InputVerifier:
public class FormattedTextFieldVerifier extends InputVerifier {
public boolean verify(JComponent input) {
if (input instanceof JFormattedTextField) {
JFormattedTextField ftf = (JFormattedTextField)input;
AbstractFormatter formatter = ftf.getFormatter();
if (formatter != null) {
String text = ftf.getText();
try {
formatter.stringToValue(text);
return true;
} catch (ParseException pe) {
return false;
}
}
}
return true;
}
public boolean shouldYieldFocus(JComponent input) {
return verify(input);
}
}
Alternatively, you could invoke commitEdit, which would also
commit the value.
JFormattedTextField does not do the formatting it self,
rather formatting is done through an instance of
JFormattedTextField.AbstractFormatter which is obtained from
an instance of JFormattedTextField.AbstractFormatterFactory.
Instances of JFormattedTextField.AbstractFormatter are
notified when they become active by way of the
install method, at which point the
JFormattedTextField.AbstractFormatter can install whatever
it needs to, typically a DocumentFilter. Similarly when
JFormattedTextField no longer
needs the AbstractFormatter, it will invoke
uninstall.
JFormattedTextField typically
queries the AbstractFormatterFactory for an
AbstractFormat when it gains or loses focus. Although this
can change based on the focus lost policy. If the focus lost
policy is JFormattedTextField.PERSIST
and the JFormattedTextField has been edited, the
AbstractFormatterFactory will not be queried until the
value has been commited. Similarly if the focus lost policy is
JFormattedTextField.COMMIT and an exception
is thrown from stringToValue, the
AbstractFormatterFactory will not be querired when focus is
lost or gained.
JFormattedTextField.AbstractFormatter
is also responsible for determining when values are commited to
the JFormattedTextField. Some
JFormattedTextField.AbstractFormatters will make new values
available on every edit, and others will never commit the value. You can
force the current value to be obtained
from the current JFormattedTextField.AbstractFormatter
by way of invoking commitEdit. commitEdit will
be invoked whenever return is pressed in the
JFormattedTextField.
If an AbstractFormatterFactory has not been explicitly
set, one will be set based on the Class of the value type after
setValue has been invoked (assuming value is non-null).
For example, in the following code an appropriate
AbstractFormatterFactory and AbstractFormatter
will be created to handle formatting of numbers:
JFormattedTextField tf = new JFormattedTextField(); tf.setValue(new Number(100));
Warning: As the AbstractFormatter will
typically install a DocumentFilter on the
Document, and a NavigationFilter on the
JFormattedTextField you should not install your own. If you do,
you are likely to see odd behavior in that the editing policy of the
AbstractFormatter will not be enforced.
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 JavaBeansTM
has been added to the java.beans package.
Please see XMLEncoder.
- Since:
- 1.4
| Nested Class Summary | |
|---|---|
static class |
JFormattedTextField.AbstractFormatter
Instances of AbstractFormatter are used by
JFormattedTextField to handle the conversion both
from an Object to a String, and back from a String to an Object. |
static class |
JFormattedTextField.AbstractFormatterFactory
Instances of AbstractFormatterFactory are used by
JFormattedTextField to obtain instances of
AbstractFormatter which in turn are used to format values. |
| Nested classes/interfaces inherited from class javax.swing.JTextField |
|---|
JTextField.AccessibleJTextField |
| Nested classes/interfaces inherited from class javax.swing.text.JTextComponent |
|---|
JTextComponent.AccessibleJTextComponent, JTextComponent.DropLocation, JTextComponent.KeyBinding |
| Nested classes/interfaces inherited from class javax.swing.JComponent |
|---|
JComponent.AccessibleJComponent |
| Nested classes/interfaces inherited from class java.awt.Container |
|---|
Container.AccessibleAWTContainer |
| Nested classes/interfaces inherited from class java.awt.Component |
|---|
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy |
| Field Summary | |
|---|---|
static int |
COMMIT
Constant identifying that when focus is lost, commitEdit should be invoked. |
static int |
COMMIT_OR_REVERT
Constant identifying that when focus is lost, commitEdit should be invoked. |
static int |
PERSIST
Constant identifying that when focus is lost, the edited value should be left. |
static int |
REVERT
Constant identifying that when focus is lost, editing value should be reverted to current value set on the JFormattedTextField. |
| Fields inherited from class javax.swing.JTextField |
|---|
notifyAction |
| Fields inherited from class javax.swing.text.JTextComponent |
|---|
DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEY |
| Fields inherited from class javax.swing.JComponent |
|---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
| Fields inherited from class java.awt.Component |
|---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
| Fields inherited from interface javax.swing.SwingConstants |
|---|
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST |
| Fields inherited from interface java.awt.image.ImageObserver |
|---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
| Constructor Summary | |
|---|---|
JFormattedTextField()
Creates a JFormattedTextField with no
AbstractFormatterFactory. |
|
JFormattedTextField(Format format)
Creates a JFormattedTextField. |
|
JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
Creates a JFormattedTextField with the specified
AbstractFormatter. |
|
JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
Creates a JFormattedTextField with the specified
AbstractFormatterFactory. |
|
JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory,
Object currentValue)
Creates a JFormattedTextField with the specified
AbstractFormatterFactory and initial value. |
|
JFormattedTextField(Object value)
Creates a JFormattedTextField with the specified value. |
|
| Method Summary | |
|---|---|
void |
commitEdit()
Forces the current value to be taken from the AbstractFormatter and set as the current value. |
Action[] |
getActions()
Fetches the command list for the editor. |
int |
getFocusLostBehavior()
Returns the behavior when focus is lost. |
JFormattedTextField.AbstractFormatter |
getFormatter()
Returns the AbstractFormatter that is used to format and
parse the current value. |
JFormattedTextField.AbstractFormatterFactory |
getFormatterFactory()
Returns the current AbstractFormatterFactory. |
String |
getUIClassID()
Gets the class ID for a UI. |
Object |
getValue()
Returns the last valid value. |
protected void |
invalidEdit()
Invoked when the user inputs an invalid value. |
boolean |
isEditValid()
Returns true if the current value being edited is valid. |
protected void |
processFocusEvent(FocusEvent e)
Processes any focus events, such as FocusEvent.FOCUS_GAINED or
FocusEvent.FOCUS_LOST. |
protected void |
processInputMethodEvent(InputMethodEvent e)
Processes any input method events, such as InputMethodEvent.INPUT_METHOD_TEXT_CHANGED or
InputMethodEvent.CARET_POSITION_CHANGED. |
void |
setDocument(Document doc)
Associates the editor with a text document. |
void |
setFocusLostBehavior(int behavior)
Sets the behavior when focus is lost. |
protected void |
setFormatter(JFormattedTextField.AbstractFormatter format)
Sets the current AbstractFormatter. |
void |
setFormatterFactory(JFormattedTextField.AbstractFormatterFactory tf)
Sets the AbstractFormatterFactory. |
void |
setValue(Object value)
Sets the value that will be formatted by an AbstractFormatter obtained from the current
AbstractFormatterFactory. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
COMMIT
public static final int COMMIT
- Constant identifying that when focus is lost,
commitEditshould be invoked. If in commiting the new value aParseExceptionis thrown, the invalid value will remain.
COMMIT_OR_REVERT
public static final int COMMIT_OR_REVERT
- Constant identifying that when focus is lost,
commitEditshould be invoked. If in commiting the new value aParseExceptionis thrown, the value will be reverted.
REVERT
public static final int REVERT
- Constant identifying that when focus is lost, editing value should
be reverted to current value set on the
JFormattedTextField.
PERSIST
public static final int PERSIST
- Constant identifying that when focus is lost, the edited value should be left.
| Constructor Detail |
|---|
JFormattedTextField
public JFormattedTextField()
- Creates a
JFormattedTextFieldwith noAbstractFormatterFactory. UsesetMaskorsetFormatterFactoryto configure theJFormattedTextFieldto edit a particular type of value.
JFormattedTextField
public JFormattedTextField(Object value)
- Creates a JFormattedTextField with the specified value. This will
create an
AbstractFormatterFactorybased on the type ofvalue.- Parameters:
value- Initial value for the JFormattedTextField
JFormattedTextField
public JFormattedTextField(Format format)
- Creates a
JFormattedTextField.formatis wrapped in an appropriateAbstractFormatterwhich is then wrapped in anAbstractFormatterFactory.- Parameters:
format- Format used to look up an AbstractFormatter
JFormattedTextField
public JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
- Creates a
JFormattedTextFieldwith the specifiedAbstractFormatter. TheAbstractFormatteris placed in anAbstractFormatterFactory.- Parameters:
formatter- AbstractFormatter to use for formatting.
JFormattedTextField
public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
- Creates a
JFormattedTextFieldwith the specifiedAbstractFormatterFactory.- Parameters:
factory- AbstractFormatterFactory used for formatting.
JFormattedTextField
public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory, Object currentValue)
- Creates a
JFormattedTextFieldwith the specifiedAbstractFormatterFactoryand initial value.- Parameters:
factory-AbstractFormatterFactoryused for formatting.currentValue- Initial value to use
| Method Detail |
|---|
setFocusLostBehavior
public void setFocusLostBehavior(int behavior)
- Sets the behavior when focus is lost. This will be one of
JFormattedTextField.COMMIT_OR_REVERT,JFormattedTextField.REVERT,JFormattedTextField.COMMITorJFormattedTextField.PERSISTNote that someAbstractFormatters may push changes as they occur, so that the value of this will have no effect.This will throw an
IllegalArgumentExceptionif the object passed in is not one of the afore mentioned values.The default value of this property is
JFormattedTextField.COMMIT_OR_REVERT. - Parameters:
behavior- Identifies behavior when focus is lost- Throws:
IllegalArgumentException- if behavior is not one of the known values
getFocusLostBehavior
public int getFocusLostBehavior()
- Returns the behavior when focus is lost. This will be one of
COMMIT_OR_REVERT,COMMIT,REVERTorPERSISTNote that someAbstractFormatters may push changes as they occur, so that the value of this will have no effect. - Returns:
- returns behavior when focus is lost
setFormatterFactory
public void setFormatterFactory(JFormattedTextField.AbstractFormatterFactory tf)
- Sets the
AbstractFormatterFactory.AbstractFormatterFactoryis able to return an instance ofAbstractFormatterthat is used to format a value for display, as well an enforcing an editing policy.If you have not explicitly set an
AbstractFormatterFactoryby way of this method (or a constructor) anAbstractFormatterFactoryand consequently anAbstractFormatterwill be used based on theClassof the value.NumberFormatterwill be used forNumbers,DateFormatterwill be used forDates, otherwiseDefaultFormatterwill be used.This is a JavaBeans bound property.
- Parameters:
tf-AbstractFormatterFactoryused to lookup instances ofAbstractFormatter
getFormatterFactory
public JFormattedTextField.AbstractFormatterFactory getFormatterFactory()
- Returns the current
AbstractFormatterFactory. - Returns:
AbstractFormatterFactoryused to determineAbstractFormatters- See Also:
setFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
setFormatter
protected void setFormatter(JFormattedTextField.AbstractFormatter format)
- Sets the current
AbstractFormatter.You should not normally invoke this, instead set the
AbstractFormatterFactoryor set the value.JFormattedTextFieldwill invoke this as the state of theJFormattedTextFieldchanges and requires the value to be reset.JFormattedTextFieldpasses in theAbstractFormatterobtained from theAbstractFormatterFactory.This is a JavaBeans bound property.
- Parameters:
format- AbstractFormatter to use for formatting- See Also:
setFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
getFormatter
public JFormattedTextField.AbstractFormatter getFormatter()
- Returns the
AbstractFormatterthat is used to format and parse the current value. - Returns:
- AbstractFormatter used for formatting
setValue
public void setValue(Object value)
- Sets the value that will be formatted by an
AbstractFormatterobtained from the currentAbstractFormatterFactory. If noAbstractFormatterFactoryhas been specified, this will attempt to create one based on the type ofvalue.The default value of this property is null.
This is a JavaBeans bound property.
- Parameters:
value- Current value to display
getValue
public Object getValue()
- Returns the last valid value. Based on the editing policy of
the
AbstractFormatterthis may not return the current value. The currently edited value can be obtained by invokingcommitEditfollowed bygetValue. - Returns:
- Last valid value
commitEdit
public void commitEdit()
throws ParseException
- Forces the current value to be taken from the
AbstractFormatterand set as the current value. This has no effect if there is no currentAbstractFormatterinstalled. - Throws:
ParseException- if theAbstractFormatteris not able to format the current value
isEditValid
public boolean isEditValid()
- Returns true if the current value being edited is valid. The value of
this is managed by the current
AbstractFormatter, as such there is no public setter for it. - Returns:
- true if the current value being edited is valid.
invalidEdit
protected void invalidEdit()
- Invoked when the user inputs an invalid value. This gives the component a chance to provide feedback. The default implementation beeps.
processInputMethodEvent
protected void processInputMethodEvent(InputMethodEvent e)
- Processes any input method events, such as
InputMethodEvent.INPUT_METHOD_TEXT_CHANGEDorInputMethodEvent.CARET_POSITION_CHANGED. - Overrides:
processInputMethodEventin classJTextComponent
- Parameters:
e- theInputMethodEvent- See Also:
InputMethodEvent
processFocusEvent
protected void processFocusEvent(FocusEvent e)
- Processes any focus events, such as
FocusEvent.FOCUS_GAINEDorFocusEvent.FOCUS_LOST. - Overrides:
processFocusEventin classComponent
- Parameters:
e- theFocusEvent- See Also:
FocusEvent
getActions
public Action[] getActions()
- Fetches the command list for the editor. This is
the list of commands supported by the plugged-in UI
augmented by the collection of commands that the
editor itself supports. These are useful for binding
to events, such as in a keymap.
- Overrides:
getActionsin classJTextField
- Returns:
- the command list
getUIClassID
public String getUIClassID()
- Gets the class ID for a UI.
- Overrides:
getUIClassIDin classJTextField
- Returns:
- the string "FormattedTextFieldUI"
- See Also:
JComponent.getUIClassID()
setDocument
public void setDocument(Document doc)
- Associates the editor with a text document.
The currently registered factory is used to build a view for
the document, which gets displayed by the editor after revalidation.
A PropertyChange event ("document") is propagated to each listener.
- Overrides:
setDocumentin classJTextField
- Parameters:
doc- the document to display/edit- See Also:
JTextComponent.getDocument()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Developer Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2015, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.