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