Класс 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 |
Создаёт MaskFormatter со заданной маской. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
String |
getInvalidCharacters() |
Возвращает символы, которые недопустимы для ввода. |
String |
getMask() |
Возвращает маску форматирования. |
String |
getPlaceholder() |
Возвращает строку, используемую, если значение не полностью заполняет маску. |
char |
getPlaceholderCharacter() |
Возвращает символ, используемый вместо символов, которые отсутствуют в значении, т.е. пользователь должен их заполнить. |
String |
getValidCharacters() |
Возвращает допустимые символы, которые можно ввести. |
boolean |
getValueContainsLiteralCharacters() |
Возвращает true, если stringToValue должен возвращать буквенные символы в маске. |
void |
install |
Устанавливает DefaultFormatter на определённый JFormattedTextField. |
void |
setInvalidCharacters |
Позволяет дополнительно ограничить символы, которые можно ввести. |
void |
setMask |
Устанавливает маску, определяющую допустимые символы. |
void |
setPlaceholder |
Устанавливает строку, используемую, если значение не полностью заполняет маску. |
void |
setPlaceholderCharacter |
Устанавливает символ, используемый вместо символов, которые отсутствуют в значении, т.е. пользователь должен их заполнить. |
void |
setValidCharacters |
Позволяет дополнительно ограничить символы, которые можно ввести. |
void |
setValueContainsLiteralCharacters |
Если true, возвращаемое значение и устанавливаемое значение также будут содержать буквенные символы в маске. |
Object |
stringToValue |
Парсит текст, возвращая соответствующее представление объекта строки value. |
String |
valueToString |
Возвращает строковое представление объекта 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
Подробное описание конструкторов
MaskFormatter
public 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)
- Параметры:
-
placeholder- Строка, используемая при форматировании, если значение не полностью заполняет маску
getPlaceholder
public String getPlaceholder()
- Возвращает:
- Строка, используемая при форматировании, если значение не полностью заполняет маску
setPlaceholderCharacter
public void setPlaceholderCharacter(char placeholder)
Это применимо только в том случае, если строка-заполнитель не указана или не полностью заполняет маску.
- Параметры:
-
placeholder- Символ, используемый при форматировании, если значение не полностью заполняет маску
getPlaceholderCharacter
public char getPlaceholderCharacter()
- Возвращает:
- Символ, используемый при форматировании, если значение не полностью заполняет маску
setValueContainsLiteralCharacters
public void setValueContainsLiteralCharacters(boolean containsLiteralChars)
Например, если маска '(###) ###-####', текущее значение '(415) 555-1212', и valueContainsLiteralCharacters равно true stringToValue вернёт '(415) 555-1212'. С другой стороны, если valueContainsLiteralCharacters равно false, stringToValue вернёт '4155551212'.
- Параметры:
-
containsLiteralChars- Используется для указания, должны ли символы-литералы в маске возвращаться в stringToValue
getValueContainsLiteralCharacters
public boolean getValueContainsLiteralCharacters()
stringToValue должен возвращать символы-литералы в маске.- Возвращает:
- True, если символы-литералы в маске должны возвращаться в stringToValue
stringToValue
public Object stringToValue(String value) throws ParseException
value. Это удаляет символы-литералы по мере необходимости и вызывает методы суперкласса stringToValue, так что если вы указали класс значения (setValueClass), будет создан его экземпляр. Это вызовет исключение ParseException, если значение не соответствует текущей маске. Обратитесь к setValueContainsLiteralCharacters(boolean) для получения подробностей о том, как обрабатываются литералы.- Переопределяет:
-
stringToValueв классеDefaultFormatter - Параметры:
-
value- Строка для преобразования - Возвращает:
- Представление объекта текста
- Исключения:
-
ParseException- если при преобразовании произошла ошибка - См. также:
valueToString
public String valueToString(Object value) throws ParseException
value на основе маски. Обратитесь к setValueContainsLiteralCharacters(boolean) для получения подробностей о том, как обрабатываются литералы.- Переопределяет:
-
valueToStringв классеDefaultFormatter - Параметры:
-
value- Значение для преобразования - Возвращает:
- Строковое представление значения
- Исключения:
-
ParseException- если при преобразовании произошла ошибка - См. также:
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, 2021, 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/17/docs/api/java.desktop/javax/swing/text/MaskFormatter.html