| 
 
 | 
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Object
  |
  +--javax.swing.JFormattedTextField.AbstractFormatter
        |
        +--javax.swing.text.DefaultFormatter
              |
              +--javax.swing.text.MaskFormatter
Safe:  MaskFormatter is used to format and edit strings. The behavior
 of a MaskFormatter is controlled by way off a String mask
 that specifies the valid characters that can be contained at a particular
 location in the Document model. The following characters can
 be specified:
 
| # | Any valid number, uses Character.isDigit.
                    | 
| ' | Escape character, used to escape any of the special formatting characters. | 
| U | Any character (Character.isLetter). All
          lowercase letters are mapped to upper case. | 
| L | Any character (Character.isLetter). All
          upper case letters are mapped to lower case. | 
| A | Any character or number (Character.isLetter
          or Character.isDigit) | 
| ? | Any character
          (Character.isLetter). | 
| * | Anything. | 
| H | Any hex character (0-9, a-f or A-F). | 
Typically characters correspond to one char, but in certain languages this is not the case. The mask is on a per character basis, and will thus adjust to fit as many chars as are needed.
 You can further restrict the characters that can be input by the
 setInvalidCharacters and setValidCharacters
 methods. setInvalidCharacters allows you to specify
 which characters are not legal. setValidCharacters allows
 you to specify which characters are valid. For example, the following
 code block is equivalent to a mask of '0xHHH' with no invalid/valid
 characters:
 
 MaskFormatter formatter = new MaskFormatter("0x***");
 formatter.setValidCharacters("0123456789abcdefABCDEF");
 
 When initially formatting a value if the length of the string is less than the length of the mask, two things can happen. Either the placeholder string will be used, or the placeholder character will be used. Precedence is given to the placeholder string. For example:
   MaskFormatter formatter = new MaskFormatter("###-####");
   formatter.setPlaceholderCharacter('_');
   formatter.getDisplayValue(tf, "123");
 
 
 Would result in the string '123-____'. If
 setPlaceholder("555-1212") was invoked '123-1212' would
 result. The placeholder String is only used on the initial format,
 on subsequent formats only the placeholder character will be used.
 
 If a MaskFormatter is configured to only allow valid characters
 (setAllowsInvalid(false)) literal characters will be skipped as
 necessary when editing. Consider a MaskFormatter with
 the mask "###-####" and current value "555-1212". Using the right
 arrow key to navigate through the field will result in (| indicates the
 position of the caret):
 
|555-1212 5|55-1212 55|5-1212 555-|1212 555-1|212The '-' is a literal (non-editable) character, and is skipped.
 Similar behavior will result when editing. Consider inserting the string
 '123-45' and '12345' into the MaskFormatter in the
 previous example. Both inserts will result in the same String,
 '123-45__'. When MaskFormatter
 is processing the insert at character position 3 (the '-'), two things can
 happen:
 
 By default MaskFormatter will not allow invalid edits, you can
 change this with the setAllowsInvalid method, and will
 commit edits on valid edits (use the setCommitsOnValidEdit to
 change this).
 
 By default, MaskFormatter is in overwrite mode. That is as
 characters are typed a new character is not inserted, rather the character
 at the current location is replaced with the newly typed character. You
 can change this behavior by way of the method setOverwriteMode.
 
 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 java.beans.XMLEncoder.
| Field Summary | |
private static char | 
ALPHA_NUMERIC_KEY
 | 
private static char | 
ANYTHING_KEY
 | 
private static char | 
CHARACTER_KEY
 | 
private  boolean | 
containsLiteralChars
Indicates if the value contains the literal characters.  | 
private static char | 
DIGIT_KEY
 | 
private static javax.swing.text.MaskFormatter.MaskCharacter[] | 
EmptyMaskChars
 | 
private static char | 
HEX_KEY
 | 
private  String | 
invalidCharacters
List of invalid characters.  | 
private static char | 
LITERAL_KEY
 | 
private static char | 
LOWERCASE_KEY
 | 
private  String | 
mask
The user specified mask.  | 
private  javax.swing.text.MaskFormatter.MaskCharacter[] | 
maskChars
 | 
private  char | 
placeholder
String used to represent characters not present.  | 
private  String | 
placeholderString
String used for the passed in value if it does not completely fill the mask.  | 
private static char | 
UPPERCASE_KEY
 | 
private  String | 
validCharacters
List of valid characters.  | 
| Fields inherited from class javax.swing.text.DefaultFormatter | 
replaceHolder | 
| Fields inherited from class javax.swing.AbstractFormatter | 
 | 
| Constructor Summary | |
MaskFormatter()
Enabled: Creates a MaskFormatter with no mask.  | 
|
MaskFormatter(String mask)
Enabled: Creates a MaskFormatter with the specified mask. | 
|
| Method Summary | |
private  void | 
append(StringBuffer result,
       String value,
       int[] index,
       String placeholder,
       javax.swing.text.MaskFormatter.MaskCharacter[] mask)
Invokes append on the mask characters in
 mask. | 
(package private)  boolean | 
canReplace(javax.swing.text.DefaultFormatter.ReplaceHolder rh)
This method does the following (assuming !getAllowsInvalid()): iterate over the max of the deleted region or the text length, for each character: If it is valid (matches the mask at the particular position, or matches the literal character at the position), allow it Else if the position identifies a literal character, add it.  | 
private  char | 
getCharacter(int index,
             char aChar)
Returns the character to insert at the specified location based on the passed in character.  | 
 String | 
getInvalidCharacters()
Enabled: Returns the characters that are not valid for input.  | 
private  int | 
getInvalidOffset(String string,
                 boolean completeMatch)
Returns -1 if the passed in string is valid, otherwise the index of the first bogus character is returned.  | 
private  char | 
getLiteral(int index)
Returns the literal character at the specified location.  | 
 String | 
getMask()
Enabled: Returns the formatting mask.  | 
private  javax.swing.text.MaskFormatter.MaskCharacter | 
getMaskCharacter(int index)
Returns the MaskCharacter at the specified location.  | 
private  int | 
getMaxLength()
Returns the maximum length the text can be.  | 
 String | 
getPlaceholder()
Enabled: Returns the String to use if the value does not completely fill in the mask.  | 
 char | 
getPlaceholderCharacter()
Enabled: Returns the character to use in place of characters that are not present in the value, ie the user must fill them in.  | 
 String | 
getValidCharacters()
Enabled: Returns the valid characters that can be input.  | 
 boolean | 
getValueContainsLiteralCharacters()
Enabled: Returns true if stringToValue should return literal
 characters in the mask. | 
 void | 
install(JFormattedTextField ftf)
Enabled: Installs the DefaultFormatter onto a particular
 JFormattedTextField. | 
private  boolean | 
isLiteral(int index)
Returns true if the character at the specified location is a literal, that is it can not be edited.  | 
(package private)  boolean | 
isNavigatable(int offset)
Returns true if the MaskFormatter allows invalid, or the offset is less than the max length and the character at offset is a literal. | 
private  boolean | 
isPlaceholder(int index,
              char aChar)
Returns true if the placeholder character matches aChar.  | 
private  boolean | 
isValidCharacter(int index,
                 char aChar)
Returns true if the passed in character matches the mask at the specified location.  | 
(package private)  boolean | 
isValidEdit(javax.swing.text.DefaultFormatter.ReplaceHolder rh)
 | 
private  void | 
readObject(ObjectInputStream s)
Subclassed to update the internal representation of the mask after the default read operation has completed.  | 
 void | 
setInvalidCharacters(String invalidCharacters)
Enabled: Allows for further restricting of the characters that can be input.  | 
 void | 
setMask(String mask)
Enabled: Sets the mask dictating the legal characters.  | 
 void | 
setPlaceholder(String placeholder)
Enabled: Sets the string to use if the value does not completely fill in the mask.  | 
 void | 
setPlaceholderCharacter(char placeholder)
Enabled: Sets the character to use in place of characters that are not present in the value, ie the user must fill them in.  | 
 void | 
setValidCharacters(String validCharacters)
Enabled: Allows for further restricting of the characters that can be input.  | 
 void | 
setValueContainsLiteralCharacters(boolean containsLiteralChars)
Enabled: If true, the returned value and set value will also contain the literal characters in mask.  | 
 Object | 
stringToValue(String value)
Enabled: Parses the text, returning the appropriate Object representation of the String value. | 
private  Object | 
stringToValue(String value,
              boolean completeMatch)
Actual stringToValue implementation. | 
private  String | 
stripLiteralChars(String string)
Removes the literal characters from the passed in string.  | 
private  void | 
updateInternalMask()
Updates the internal representation of the mask.  | 
 String | 
valueToString(Object value)
Enabled: Returns a String representation of the Object value
 based on the mask. | 
| Methods inherited from class javax.swing.AbstractFormatter | 
getActions, getFormattedTextField, invalidEdit, setEditValid, uninstall | 
| Methods inherited from class java.lang.Object | 
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Field Detail | 
private static final char DIGIT_KEY
private static final char LITERAL_KEY
private static final char UPPERCASE_KEY
private static final char LOWERCASE_KEY
private static final char ALPHA_NUMERIC_KEY
private static final char CHARACTER_KEY
private static final char ANYTHING_KEY
private static final char HEX_KEY
private static final javax.swing.text.MaskFormatter.MaskCharacter[] EmptyMaskChars
private String mask
private transient javax.swing.text.MaskFormatter.MaskCharacter[] maskChars
private String validCharacters
private String invalidCharacters
private String placeholderString
private char placeholder
private boolean containsLiteralChars
| Constructor Detail | 
public MaskFormatter()
public MaskFormatter(String mask)
              throws java.text.ParseException
MaskFormatter with the specified mask.
 A ParseException
 will be thrown if mask is an invalid mask.
ParseException - if mask does not contain valid mask characters| Method Detail | 
public void setMask(String mask)
             throws java.text.ParseException
ParseException if mask is
 not valid.
ParseException - if mask does not contain valid mask characterspublic String getMask()
public void setValidCharacters(String validCharacters)
invalidCharacters, and in
 validCharacters will be allowed to be input. Passing
 in null (the default) implies the valid characters are only bound
 by the mask and the invalid characters.
validCharacters - If non-null, specifies legal characters.public String getValidCharacters()
public void setInvalidCharacters(String invalidCharacters)
invalidCharacters, and in
 validCharacters will be allowed to be input. Passing
 in null (the default) implies the valid characters are only bound
 by the mask and the valid characters.
public String getInvalidCharacters()
public void setPlaceholder(String placeholder)
placeholder - String used when formatting if the value does not
        completely fill the maskpublic String getPlaceholder()
public void setPlaceholderCharacter(char placeholder)
This is only applicable if the placeholder string has not been specified, or does not completely fill in the mask.
placeholder - Character used when formatting if the value does not
        completely fill the maskpublic char getPlaceholderCharacter()
public void setValueContainsLiteralCharacters(boolean containsLiteralChars)
 For example, if the mask is '(###) ###-####', the
 current value is '(415) 555-1212', and
 valueContainsLiteralCharacters is
 true stringToValue will return
 '(415) 555-1212'. On the other hand, if
 valueContainsLiteralCharacters is false,
 stringToValue will return '4155551212'.
containsLiteralChars - Used to indicate if literal characters in
        mask should be returned in stringToValuepublic boolean getValueContainsLiteralCharacters()
stringToValue should return literal
 characters in the mask.
public Object stringToValue(String value)
                     throws java.text.ParseException
value. This strips the literal characters as
 necessary and invokes supers stringToValue, so that if
 you have specified a value class (setValueClass) an
 instance of it will be created. This will thrown a
 ParseException if the value does not match the current
 mask.
stringToValue in class DefaultFormatterParseException - if there is an error in the conversion
public String valueToString(Object value)
                     throws java.text.ParseException
value
 based on the mask.
valueToString in class DefaultFormattervalue - Value to convert
ParseException - if there is an error in the conversionpublic void install(JFormattedTextField ftf)
DefaultFormatter onto a particular
 JFormattedTextField.
 This will invoke valueToString to convert the
 current value from the JFormattedTextField to
 a String. This will then install the Actions from
 getActions, the DocumentFilter
 returned from getDocumentFilter and the
 NavigationFilter returned from
 getNavigationFilter onto the
 JFormattedTextField.
 
 Subclasses will typically only need to override this if they
 wish to install additional listeners on the
 JFormattedTextField.
 
 If there is a ParseException in converting the
 current value to a String, this will set the text to an empty
 String, and mark the JFormattedTextField as being
 in an invalid state.
 
 While this is a public method, this is typically only useful
 for subclassers of JFormattedTextField.
 JFormattedTextField will invoke this method at
 the appropriate times when the value changes, or its internal
 state changes.
install in class DefaultFormatterftf - JFormattedTextField to format for, may be null indicating
            uninstall from current JFormattedTextField.
private Object stringToValue(String value,
                             boolean completeMatch)
                      throws java.text.ParseException
stringToValue implementation.
 If completeMatch is true, the value must exactly match
 the mask, on the other hand if completeMatch is false
 the string must match the mask or the placeholder string.
java.text.ParseException
private int getInvalidOffset(String string,
                             boolean completeMatch)
private void append(StringBuffer result,
                    String value,
                    int[] index,
                    String placeholder,
                    javax.swing.text.MaskFormatter.MaskCharacter[] mask)
             throws java.text.ParseException
append on the mask characters in
 mask.
java.text.ParseException
private void updateInternalMask()
                         throws java.text.ParseException
java.text.ParseExceptionprivate javax.swing.text.MaskFormatter.MaskCharacter getMaskCharacter(int index)
private boolean isPlaceholder(int index,
                              char aChar)
private boolean isValidCharacter(int index,
                                 char aChar)
private boolean isLiteral(int index)
private int getMaxLength()
private char getLiteral(int index)
private char getCharacter(int index,
                          char aChar)
private String stripLiteralChars(String string)
private void readObject(ObjectInputStream s)
                 throws IOException,
                        ClassNotFoundException
IOException
ClassNotFoundExceptionboolean isNavigatable(int offset)
offset is a literal.
isNavigatable in class DefaultFormatterboolean isValidEdit(javax.swing.text.DefaultFormatter.ReplaceHolder rh)
isValidEdit in class DefaultFormatterboolean canReplace(javax.swing.text.DefaultFormatter.ReplaceHolder rh)
canReplace in class DefaultFormatter
  | 
 
 | 
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||