|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.text.JTextComponent javax.swing.JTextField javax.swing.JFormattedTextField
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
PropertyChangeEvent
s 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.AbstractFormatter
s 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:
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
.
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.
|
private static class |
JFormattedTextField.CancelAction
CancelAction will reset the value in the JFormattedTextField when actionPerformed is invoked. |
(package private) static class |
JFormattedTextField.CommitAction
Used to commit the edit. |
private class |
JFormattedTextField.DocumentHandler
Sets the dirty state as the document changes. |
private class |
JFormattedTextField.FocusLostHandler
FOCUS_LOST behavior implementation |
Nested classes inherited from class javax.swing.JTextField |
JTextField.AccessibleJTextField, JTextField.NotifyAction, JTextField.ScrollRepainter |
Nested classes inherited from class javax.swing.text.JTextComponent |
JTextComponent.AccessibleJTextComponent, JTextComponent.KeyBinding |
Nested classes inherited from class javax.swing.JComponent |
JComponent.AccessibleJComponent, JComponent.ActionStandin, JComponent.IntVector, JComponent.KeyboardState |
Nested classes inherited from class java.awt.Container |
Container.AccessibleAWTContainer |
Nested classes inherited from class java.awt.Component |
Component.AccessibleAWTComponent, 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. |
private boolean |
composedTextExists
Indicates the input method composed text is in the document |
private static Action[] |
defaultActions
|
private DocumentListener |
documentListener
Used to set the dirty state. |
private boolean |
edited
Indicates the current value has been edited. |
private boolean |
editValid
True while the value being edited is valid. |
private JFormattedTextField.AbstractFormatterFactory |
factory
Factory used to obtain an instance of AbstractFormatter. |
private int |
focusLostBehavior
Behavior when focus is lost. |
private JFormattedTextField.FocusLostHandler |
focusLostHandler
A handler for FOCUS_LOST event |
private JFormattedTextField.AbstractFormatter |
format
Object responsible for formatting the current value. |
private Object |
mask
Masked used to set the AbstractFormatterFactory. |
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 . |
private ActionMap |
textFormatterActionMap
ActionMap that the TextFormatter Actions are added to. |
private static String |
uiClassID
|
private Object |
value
Last valid value. |
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 |
_bounds, accessibleContext, listenerList, paintingChild, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
Fields inherited from class java.awt.Container |
|
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. |
private JFormattedTextField.AbstractFormatterFactory |
getDefaultFormatterFactory(Object type)
Returns an AbstractFormatterFactory suitable for the passed in Object type. |
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. |
private boolean |
isEdited()
Returns true if the receiver has been edited. |
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. |
private void |
setEdited(boolean edited)
Sets the edited state of the receiver. |
private void |
setEditValid(boolean isValid)
Sets the validity of the edit on the receiver. |
void |
setFocusLostBehavior(int behavior)
Sets the behavior when focus is lost. |
protected void |
setFormatter(JFormattedTextField.AbstractFormatter format)
Sets the current AbstractFormatter .
|
private void |
setFormatterActions(Action[] actions)
Resets the Actions that come from the TextFormatter to actions . |
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 . |
private void |
setValue(Object value,
boolean createFormat)
Does the setting of the value and firing the event. |
private void |
writeObject(ObjectOutputStream s)
See readObject and writeObject in
JComponent for more
information about serialization in Swing. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
private static final String uiClassID
private static final Action[] defaultActions
public static final int COMMIT
commitEdit
should be invoked. If in commiting the
new value a ParseException
is thrown, the invalid
value will remain.
setFocusLostBehavior(int)
,
Constant Field Valuespublic static final int COMMIT_OR_REVERT
commitEdit
should be invoked. If in commiting the new
value a ParseException
is thrown, the value will be
reverted.
setFocusLostBehavior(int)
,
Constant Field Valuespublic static final int REVERT
JFormattedTextField
.
setFocusLostBehavior(int)
,
Constant Field Valuespublic static final int PERSIST
setFocusLostBehavior(int)
,
Constant Field Valuesprivate JFormattedTextField.AbstractFormatterFactory factory
private JFormattedTextField.AbstractFormatter format
private Object value
private boolean editValid
private int focusLostBehavior
private boolean edited
private DocumentListener documentListener
private Object mask
private ActionMap textFormatterActionMap
private boolean composedTextExists
private JFormattedTextField.FocusLostHandler focusLostHandler
Constructor Detail |
public JFormattedTextField()
JFormattedTextField
with no
AbstractFormatterFactory
. Use setMask
or
setFormatterFactory
to configure the
JFormattedTextField
to edit a particular type of
value.
public JFormattedTextField(Object value)
AbstractFormatterFactory
based on the
type of value
.
value
- Initial value for the JFormattedTextFieldpublic JFormattedTextField(Format format)
JFormattedTextField
. format
is
wrapped in an appropriate AbstractFormatter
which is
then wrapped in an AbstractFormatterFactory
.
format
- Format used to look up an AbstractFormatterpublic JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
JFormattedTextField
with the specified
AbstractFormatter
. The AbstractFormatter
is placed in an AbstractFormatterFactory
.
formatter
- AbstractFormatter to use for formatting.public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
JFormattedTextField
with the specified
AbstractFormatterFactory
.
factory
- AbstractFormatterFactory used for formatting.public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory, Object currentValue)
JFormattedTextField
with the specified
AbstractFormatterFactory
and initial value.
factory
- AbstractFormatterFactory
used for
formatting.currentValue
- Initial value to useMethod Detail |
public void setFocusLostBehavior(int behavior)
JFormattedTextField.COMMIT_OR_REVERT
,
JFormattedTextField.REVERT
,
JFormattedTextField.COMMIT
or
JFormattedTextField.PERSIST
Note that some AbstractFormatter
s may push changes as
they occur, so that the value of this will have no effect.
This will throw an IllegalArgumentException
if the object
passed in is not one of the afore mentioned values.
The default value of this property is
JFormattedTextField.COMMIT_OR_REVERT
.
behavior
- Identifies behavior when focus is lost
IllegalArgumentException
- if behavior is not one of the known
valuespublic int getFocusLostBehavior()
COMMIT_OR_REVERT
,
COMMIT
,
REVERT
or
PERSIST
Note that some AbstractFormatter
s may push changes as
they occur, so that the value of this will have no effect.
public void setFormatterFactory(JFormattedTextField.AbstractFormatterFactory tf)
AbstractFormatterFactory
.
AbstractFormatterFactory
is
able to return an instance of AbstractFormatter
that is
used to format a value for display, as well an enforcing an editing
policy.
If you have not explicitly set an AbstractFormatterFactory
by way of this method (or a constructor) an
AbstractFormatterFactory
and consequently an
AbstractFormatter
will be used based on the
Class
of the value. NumberFormatter
will
be used for Number
s, DateFormatter
will
be used for Dates
, otherwise DefaultFormatter
will be used.
This is a JavaBeans bound property.
tf
- AbstractFormatterFactory
used to lookup
instances of AbstractFormatter
public JFormattedTextField.AbstractFormatterFactory getFormatterFactory()
AbstractFormatterFactory
.
AbstractFormatterFactory
used to determine
AbstractFormatter
ssetFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
protected void setFormatter(JFormattedTextField.AbstractFormatter format)
AbstractFormatter
.
You should not normally invoke this, instead set the
AbstractFormatterFactory
or set the value.
JFormattedTextField
will
invoke this as the state of the JFormattedTextField
changes and requires the value to be reset.
JFormattedTextField
passes in the
AbstractFormatter
obtained from the
AbstractFormatterFactory
.
This is a JavaBeans bound property.
format
- AbstractFormatter to use for formattingsetFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
public JFormattedTextField.AbstractFormatter getFormatter()
AbstractFormatter
that is used to format and
parse the current value.
public void setValue(Object value)
AbstractFormatter
obtained from the current
AbstractFormatterFactory
. If no
AbstractFormatterFactory
has been specified, this will
attempt to create one based on the type of value
.
The default value of this property is null.
This is a JavaBeans bound property.
value
- Current value to displaypublic Object getValue()
AbstractFormatter
this may not return the current
value. The currently edited value can be obtained by invoking
commitEdit
followed by getValue
.
public void commitEdit() throws ParseException
AbstractFormatter
and set as the current value.
This has no effect if there is no current
AbstractFormatter
installed.
ParseException
- if the AbstractFormatter
is not able
to format the current valueprivate void setEditValid(boolean isValid)
AbstractFormatter
as the user edits the value.
Not all formatters will allow the component to get into an invalid state, and thus this may never be invoked.
Based on the look and feel this may visually change the state of the receiver.
isValid
- boolean indicating if the currently edited value is
valid.public boolean isEditValid()
AbstractFormatter
, as such
there is no public setter for it.
protected void invalidEdit()
protected void processInputMethodEvent(InputMethodEvent e)
InputMethodEvent.INPUT_METHOD_TEXT_CHANGED
or
InputMethodEvent.CARET_POSITION_CHANGED
.
processInputMethodEvent
in class JTextComponent
e
- the InputMethodEvent
InputMethodEvent
protected void processFocusEvent(FocusEvent e)
FocusEvent.FOCUS_GAINED
or
FocusEvent.FOCUS_LOST
.
processFocusEvent
in class Component
e
- the FocusEvent
FocusEvent
public Action[] getActions()
getActions
in class JTextField
public String getUIClassID()
getUIClassID
in class JTextField
JComponent.getUIClassID()
public void setDocument(Document doc)
setDocument
in class JTextField
doc
- the document to display/editJTextComponent.getDocument()
private void writeObject(ObjectOutputStream s) throws IOException
JTextField
readObject
and writeObject
in
JComponent
for more
information about serialization in Swing.
IOException
private void setFormatterActions(Action[] actions)
actions
.
private void setValue(Object value, boolean createFormat)
createFormat
is true, this will also obtain
a new AbstractFormatter
from the current
factory.
private void setEdited(boolean edited)
private boolean isEdited()
private JFormattedTextField.AbstractFormatterFactory getDefaultFormatterFactory(Object type)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |