숫자 데이터가있는 JFormattedTextdields가 여러 개 있습니다. 나는 DecimalFormat, InternationalFormatter, DocumentListener를 사용했으며 CaretPositionListener로 시도했다.Java : JFormattedTextField가 focusLost 및 focusGained에서 setGroupingUsed()를 변경했습니다.
유일한 문제는 숫자 입력이 커지고 문자를 그룹화 할 때 캐럿 위치입니다.
focusGained & onFocusLost에서 각 jformattedtextfields의 DecimalFormat의 setGroupingUsed()를 어떻게 동적으로 설정할 수 있습니까?
어떤 아이디어 나 제안 ....
UPDATE 코드 & 문제 : I 입력 "12345"을 시도, 추가의 "1234"쉼표 "1234"를 나타납니다.
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에 솔루션로 구현 한 것입니다 : 이것은 내가 사용하는 서식 코드 4. 후 4 & 세 사이의 대신을 캐럿을 제공합니다. 그래서 그냥 caret의 적절한 유지, 값을 입력하는 동안 그룹화 문자를 처리 할 수있는 더 좋은 방법이 있나요 :
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/)를 게시하십시오. –