Класс MaskFormatter
- java.lang.Object
-
- javax.swing.JFormattedTextField.AbstractFormatter
-
- javax.swing.text.DefaultFormatter
-
- javax.swing.text.MaskFormatter
- Все реализованные интерфейсы:
-
Serializable,Cloneable
public class MaskFormatter extends DefaultFormatter
Класс MaskFormatter используется для форматирования и редактирования строк. Поведение MaskFormatter контролируется с помощью маски-строки, которая определяет допустимые символы, которые могут быть содержаться в определенной позиции в модели Document. Доступные символы:
| Символ | Описание |
|---|---|
| # | Любая цифра, используется Character.isDigit. |
| ' | Символ экранирования, используется для экранирования специальных символов форматирования. |
| U | Любой символ (Character.isLetter). Все строчные буквы преобразуются в заглавные. |
| L | Любой символ (Character.isLetter). Все заглавные буквы преобразуются в строчные. |
| A | Любой символ или цифра (Character.isLetter или Character.isDigit). |
| ? | Любой символ (Character.isLetter). |
| * | Любой символ. |
| H | Любой шестнадцатеричный символ (0-9, a-f или A-F). |
Обычно символы соответствуют одному символу, но в некоторых языках это не так. Маска применяется к каждому символу и будет автоматически подстраиваться под количество необходимых символов.
Вы можете дополнительно ограничить символы, которые можно ввести, используя методы setInvalidCharacters и setValidCharacters. setInvalidCharacters позволяет указать недопустимые символы. setValidCharacters позволяет указать допустимые символы. Например, следующий фрагмент кода эквивалентен маске '0xHHH' без недопустимых/допустимых символов:
MaskFormatter formatter = new MaskFormatter("0x***");
formatter.setValidCharacters("0123456789abcdefABCDEF"); При начальном форматировании значения, если длина строки меньше длины маски, могут произойти два события. Либо будет использована строка-заполнитель, либо символ-заполнитель. Преимущество отдается строке-заполнителю. Например:
MaskFormatter formatter = new MaskFormatter("###-####");
formatter.setPlaceholderCharacter('_');
formatter.getDisplayValue(tf, "123"); Результат — строка '123-____'. Если setPlaceholder("555-1212") был вызван, результат будет '123-1212'. Строка-заполнитель используется только при первоначальном форматировании, при последующих форматированиях используется только символ-заполнитель.
Если для MaskFormatter настроен только вывод допустимых символов (setAllowsInvalid(false)) символы-литералы будут пропускаться при редактировании по мере необходимости. Рассмотрим MaskFormatter с маской "###-####" и текущим значением "555-1212". При использовании правой клавиши перемещения по полю, результат будет:
|555-1212 5|55-1212 55|5-1212 555-|1212 555-1|212Символ '-' является литералом (нередактируемым) и пропускается.
Аналогичное поведение будет при редактировании. Рассмотрим вставку строк '123-45' и '12345' в MaskFormatter в предыдущем примере. Обе вставки приведут к одной и той же строке '123-45__'. Когда MaskFormatter обрабатывает вставку в позиции 3 (символ '-'), могут произойти следующие события:
- Если вставленный символ — '-', он принимается.
- Если вставленный символ соответствует маске для следующего нелитерального символа, он принимается в новой позиции.
- В противном случае редактирование считается недопустимым.
По умолчанию MaskFormatter не допускает недопустимых изменений, но это можно изменить с помощью метода setAllowsInvalid, а изменения будут применяться при допустимых изменениях (используйте setCommitsOnValidEdit для изменения этого).
По умолчанию MaskFormatter находится в режиме перезаписи. То есть при вводе нового символа предыдущий символ в текущей позиции заменяется новым. Это поведение можно изменить с помощью метода setOverwriteMode.
Предупреждение: Сериализованные объекты этого класса не будут совместимы с будущими версиями Swing. Текущая поддержка сериализации подходит для краткосрочного хранения или RMI между приложениями, работающими на одной версии Swing. Начиная с версии 1.4, поддержка долгосрочного хранения всех JavaBeans™ была добавлена в пакет java.beans. См. XMLEncoder.
- С:
- 1.4
- См. также:
- Сериализованная форма
Конструкторы
| Конструктор | Описание |
|---|---|
MaskFormatter() | Создает MaskFormatter без маски. |
MaskFormatter(String mask) | Создает MaskFormatter со заданной маской. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
String | getInvalidCharacters() | Возвращает символы, которые недопустимы для ввода. |
String | getMask() | Возвращает маску форматирования. |
String | getPlaceholder() | Возвращает строку, используемую, если значение не полностью заполняет маску. |
char | getPlaceholderCharacter() | Возвращает символ, используемый вместо символов, отсутствующих в значении, то есть пользователь должен их заполнить. |
String | getValidCharacters() | Возвращает допустимые символы для ввода. |
boolean | getValueContainsLiteralCharacters() | Возвращает true, если |
void | install(JFormattedTextField ftf) | Устанавливает |
void | setInvalidCharacters(String invalidCharacters) | Позволяет дополнительно ограничить символы, которые можно ввести. |
void | setMask(String mask) | Устанавливает маску, определяющую допустимые символы. |
void | setPlaceholder(String placeholder) | Устанавливает строку, используемую, если значение не полностью заполняет маску. |
void | setPlaceholderCharacter(char placeholder) | Устанавливает символ, используемый вместо символов, отсутствующих в значении, то есть пользователь должен их заполнить. |
void | setValidCharacters(String validCharacters) | Позволяет дополнительно ограничить символы, которые можно ввести. |
void | setValueContainsLiteralCharacters(boolean containsLiteralChars) | Если true, возвращаемое значение и устанавливаемое значение также будут содержать литеральные символы маски. |
Object | stringToValue(String value) | Парсит текст, возвращая соответствующее представление объекта String |
String | valueToString(Object value) | Возвращает строковое представление объекта |
Методы, унаследованные от класса javax.swing.text.DefaultFormatter
clone, getAllowsInvalid, getCommitsOnValidEdit, getDocumentFilter, getNavigationFilter, getOverwriteMode, getValueClass, setAllowsInvalid, setCommitsOnValidEdit, setOverwriteMode, setValueClass Методы, унаследованные от класса javax.swing.JFormattedTextField.AbstractFormatter
getActions, getFormattedTextField, invalidEdit, setEditValid, uninstall Методы, унаследованные от класса java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
MaskFormatter
public MaskFormatter()
Создаёт MaskFormatter без маски.
MaskFormatter
public MaskFormatter(String mask)
throws ParseException Создаёт MaskFormatter с заданной маской. Будет выброшено исключение ParseException, если mask является некорректной маской.
- Параметры:
-
mask- маска - Исключения:
-
ParseException- если маска не содержит допустимых символов маски
Методы
setMask
public void setMask(String mask)
throws ParseException Устанавливает маску, определяющую допустимые символы. Будет выброшено исключение ParseException, если mask некорректно.
- Параметры:
-
mask- маска - Исключения:
-
ParseException- если маска не содержит допустимых символов маски
getMask
public String getMask()
Возвращает маску форматирования.
- Возвращает:
- Маска, определяющая допустимые символы.
setValidCharacters
public void setValidCharacters(String validCharacters)
Позволяет дополнительно ограничить символы, которые можно ввести. Допустимы только символы, указанные в маске, не в invalidCharacters, и в validCharacters. Передача null (по умолчанию) подразумевает, что допустимые символы ограничены только маской и недопустимыми символами.
- Параметры:
-
validCharacters- если не null, определяет допустимые символы.
getValidCharacters
public String getValidCharacters()
Возвращает допустимые символы, которые можно ввести.
- Возвращает:
- Допустимые символы
setInvalidCharacters
public void setInvalidCharacters(String invalidCharacters)
Позволяет дополнительно ограничить символы, которые можно ввести. Допустимы только символы, указанные в маске, не в invalidCharacters, и в validCharacters. Передача null (по умолчанию) подразумевает, что допустимые символы ограничены только маской и допустимыми символами.
- Параметры:
-
invalidCharacters- если не null, определяет недопустимые символы.
getInvalidCharacters
public String getInvalidCharacters()
Возвращает символы, которые недопустимы для ввода.
- Возвращает:
- Недопустимые символы.
setPlaceholder
public void setPlaceholder(String placeholder)
Устанавливает строку, используемую, если значение не полностью заполняет маску. Значение null подразумевает, что должен использоваться символ-заполнитель.
- Параметры:
-
placeholder- строка, используемая при форматировании, если значение не полностью заполняет маску
getPlaceholder
public String getPlaceholder()
Возвращает строку, используемую, если значение не полностью заполняет маску.
- Возвращает:
- Строка, используемая при форматировании, если значение не полностью заполняет маску
setPlaceholderCharacter
public void setPlaceholderCharacter(char placeholder)
Устанавливает символ, используемый вместо символов, отсутствующих в значении, т.е. пользователь должен их заполнить. Значение по умолчанию - пробел.
Это применимо только в том случае, если строка-заполнитель не указана или не полностью заполняет маску.
- Параметры:
-
placeholder- символ, используемый при форматировании, если значение не полностью заполняет маску
getPlaceholderCharacter
public char getPlaceholderCharacter()
Возвращает символ, используемый вместо символов, отсутствующих в значении, т.е. пользователь должен их заполнить.
- Возвращает:
- Символ, используемый при форматировании, если значение не полностью заполняет маску
setValueContainsLiteralCharacters
public void setValueContainsLiteralCharacters(boolean containsLiteralChars)
Если true, возвращаемое значение и установленное значение также будут содержать символы-литералы в маске.
Например, если маска равна '(###) ###-####', текущее значение равно '(415) 555-1212', и valueContainsLiteralCharacters равно true, stringToValue вернёт '(415) 555-1212'. С другой стороны, если valueContainsLiteralCharacters равно false, stringToValue вернёт '4155551212'.
- Параметры:
-
containsLiteralChars- используется для указания, должны ли символы-литералы в маске возвращаться в строке stringToValue
getValueContainsLiteralCharacters
public boolean getValueContainsLiteralCharacters()
Возвращает true, если stringToValue должен возвращать символы-литералы в маске.
- Возвращает:
- True, если символы-литералы в маске должны возвращаться в stringToValue
stringToValue
public Object stringToValue(String value)
throws ParseException Парсит текст, возвращая соответствующее представление объекта строки value. Это удаляет символы-литералы по мере необходимости и вызывает супер stringToValue, так что если вы указали класс значения (setValueClass), будет создан экземпляр этого класса. Будет выброшено исключение ParseException, если значение не соответствует текущей маске. См. setValueContainsLiteralCharacters(boolean) для получения подробной информации о том, как обрабатываются литералы.
- Переопределяет:
-
stringToValueв классеDefaultFormatter - Параметры:
-
value- строка для преобразования - Возвращает:
- Объектное представление текста
- Исключения:
-
ParseException- если при преобразовании произошла ошибка - См. также:
setValueContainsLiteralCharacters(boolean)
valueToString
public String valueToString(Object value)
throws ParseException Возвращает строковое представление объекта value на основе маски. См. setValueContainsLiteralCharacters(boolean) для получения подробной информации о том, как обрабатываются литералы.
- Переопределяет:
-
valueToStringв классеDefaultFormatter - Параметры:
-
value- значение для преобразования - Возвращает:
- Строковое представление значения
- Исключения:
-
ParseException- если при преобразовании произошла ошибка - См. также:
setValueContainsLiteralCharacters(boolean)
install
public void install(JFormattedTextField ftf)
Устанавливает DefaultFormatter на конкретный JFormattedTextField. Это вызовет valueToString для преобразования текущего значения из JFormattedTextField в строку. Затем будут установлены Action из getActions, DocumentFilter из getDocumentFilter и NavigationFilter из getNavigationFilter на JFormattedTextField.
Подклассы обычно будут переопределять этот метод только в том случае, если им нужно установить дополнительные слушатели на JFormattedTextField.
Если при преобразовании текущего значения в строку произошла ошибка, это установит текст в пустую строку и отметит JFormattedTextField как находящийся в недопустимом состоянии.
Хотя этот метод является общедоступным, он обычно полезен только для подклассов JFormattedTextField. JFormattedTextField вызовет этот метод в соответствующие моменты при изменении значения или изменении его внутреннего состояния.
- Переопределяет:
-
installв классеDefaultFormatter - Параметры:
-
ftf- JFormattedTextField для форматирования, может быть null, что указывает на удаление из текущего JFormattedTextField.
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/text/MaskFormatter.html