我有許多帶有數字數據的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