С масками приходится встречаться очень часто. Во всех языках программирования, с которыми приходилось сталкиваться, находилось 2-3 достойных рабочих варианта масок, полностью удовлетворяющих условиям задачи. То есть, можно было даже выбирать. А вот для JavaFX картина оказалось другой — подходящих масок не оказалось, и пришлось разработать самостоятельно.
На мой взгляд, получилось довольно просто (собственно не очень и хотелось усложнять) и очень функционально.
MaskField и примеры использования можно скачать здесь.
Чтобы начать использовать маски в своем проекте, скопируйте файл MaskField.java. После этого, можно программно, или в файле разметки, добавлять MaskField. MaskField наследник TextField, поэтому все что вы делали с TextField, можно делать и с MaskField.
Для того чтобы сформировать правило отображения той или иной маски предусмотрены три свойства:
- mask — задает непосредственно саму маску и является обязательным
- whatMask — флаги, которые показывает какой символ в свойстве mask константа, а какой принадлежит маске
- placeholder — символы, задающие вид маски, которая не заполнена
Поскольку нам нужно различать «замаскированный» текст и «чистый» — тот что вводил пользователь, предусмотрено свойство:
- plainText
Свойство mask
Предусмотрены следующие символы:
D — любые цифры
A — любые буквы
W — любые цифры или буквы
Все остальные будут интерпретироваться как неизменяемый текст.
Свойство whatMask
Символ # означает что соответствующий символ свойства mask содержит спец символ (D, A или W). Все остальные символы следует задавать "-".
Свойство placeholder
По умолчанию все позиции маски, куда можно ввести текст отображены знаком «_». Но благодаря свойству placeholder каждой позиции можно задать свой знак.
При использовании свойств whatMask и placeholder рекомендуется использовать строки той же длины что и в свойстве mask.
Пример использования
Номер телефона:
<MaskField mask="+7(DDD)DDD-DDDD"/>
Номер автомобиля. При этом мы визуально показываем где в маске буквы, а где цифры:
<MaskField mask="AA DDD AAA" placeholder="__ ### ___"/>
А теперь просто интересный случай. Пусть нам нужно вводить число, но перед числом у нас должна быть статическая надпись «DIGIT:». Если мы напишем так:
<MaskField mask="DIGIT: DDDD"/>
то первый символ «D» начнет восприниматься как позиция для ввода цифры. Поэтому в этом случае нам нужно использовать whatMask.
<MaskField mask="DIGIT: DDDD" whatMask="-------####"/>
Основные изюминки разработанного элемента управления VAMaskField показал.
Комментариев нет:
Отправить комментарий