Значение JFormattedTextField равно Float, а маска — ##,##

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

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

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

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


person Johnny    schedule 06.12.2013    source источник


Ответы (1)


Здесь вы сталкиваетесь с небольшим ограничением JFormattedTextField.

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

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

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

person Tim B    schedule 06.12.2013
comment
Если вы запрашиваете дополнительную информацию, вам, скорее всего, следует опубликовать ее как комментарий, а не как ответ. - person Keppil; 06.12.2013
comment
Истинный. Но это тоже ответ, за исключением того, что он комментирует попытку форматирования чисел, что вызвало у меня некоторые сомнения. - person Tim B; 06.12.2013
comment
Маскировка! Использование DecimalFormat не маскирует это для меня - person Johnny; 06.12.2013