我有许多带有数字数据的JFormattedTextdield。我已经使用了DecimalFormat,InternationalFormatter,DocumentListener,并且还使用CaretPositionListener进行了尝试。Java:JFormattedTextField更改setGroupingUsed()on focusLost&focusGained
我面对的唯一问题就是当号码输入增长和分组字符进入之间时的插入位置。
如何动态设置onGocusLost上各个jformattedtextfields的DecimalFormat的setGroupingUsed()的焦点已着色&。
任何意见或建议....
更新代码&问题: 当我尝试输入 “12345”,就加入 “1234” 逗号出现的 “1,234”。这使3 &后4之间,而不是4的格式代码,我用它来插入记号:
DecimalFormat numberFormat = (DecimalFormat) DecimalFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(2);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setRoundingMode(RoundingMode.HALF_UP);
final InternationalFormatter formatter = new InternationalFormatter(numberFormat);
formatter.setAllowsInvalid(false);
formatter.setMinimum(0.00);
formatter.setMaximum(999999999.99);
return formatter;
这是我作为一个自定义的JFormattedTextField SOLUTION实现。你有什么更好的办法来处理分组字符,而输入值,所以只需插入位置仍然正确:
public void focusGained(FocusEvent e) {
if (numberFormat.isGroupingUsed()) {
Object o = this.getValue();
numberFormat.setGroupingUsed(false);
formatter.setFormat(numberFormat);
this.setFormatterFactory(new AbstractFormatterFactoryImpl());
this.setValue(o);
this.setText(o.toString());
}
}
public void focusLost(FocusEvent e) {
try {
this.commitEdit();
} catch (ParseException ex) {
//Logger.getLogger(NumberFormattedTextField.class.getName()).log(Level.SEVERE, null, ex);
}
Object o = this.getValue();
//System.out.println("focusLost : getValue = " + o);
numberFormat.setGroupingUsed(true);
formatter.setFormat(numberFormat);
this.setFormatterFactory(new AbstractFormatterFactoryImpl());
this.setValue(o);
this.setText(o.toString());
//System.out.println("focusLost : Text Set = " + o.toString());
}
为了尽快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 – 2011-12-22 11:14:28