2013-12-06 2 views
0

Возможно ли установить MaskFormatter из JFormatterTextField в ##, ## и тип значения JFormatterTextField для Float? Я попробовал это, используя следующую маску для фабрики форматирования по умолчанию, но она не работает, и getValue().getClass() дает мне java.lang.String.Значение JFormattedTextField для Float и маска для ##, ##

DefaultFormatterFactory dff = new DefaultFormatterFactory(); 
mf = new MaskFormatter("##,##); 
mf.setValueClass(Float.TYPE); 
dff.setDefaultFormatter(mf); 
field.setFormatterFactory(dff); 

И проблема с форматированием чисел заключается в том, что он не маскирует поле для меня.

PS. Моя конфигурация системы по умолчанию использует «,» как «.». на английском языке. Так что это не проблема, и я привел ее только для точности.

ответ

2

Здесь вы используете некоторое ограничение JFormattedTextField.

Если вы используете DecimalFormat http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html, вы можете настроить отображение, чтобы посмотреть, как вам нравится, но оно не жестко обеспечивает то, что пользователь вводит. Возвращаемым результатом будет число.

Если вы используете MaskFormatter, вы получите жесткое принудительное выполнение, но возвращаемое значение - это строка.

Вы можете использовать MaskFormatter и просто передать его Float.valueOf (str), когда вам нужен результат. Альтернативой является либо реализовать свой собственный объект формата, либо прослушать некоторые события, предоставленные текстовым полем и/или его фоновым документом, и непосредственно сделать свой собственный контроль над входом пользователей.

+0

Если вы запрашиваете дополнительную информацию, скорее всего, вы должны опубликовать ее как комментарий, а не как ответ. – Keppil

+0

Правда. Но это тоже ответ - за исключением того, что он комментирует попытку форматирования чисел, что вызвало у меня некоторые сомнения. –

+0

Маскировка! Использование DecimalFormat не маскирует его для меня – Johnny

Смежные вопросы