Java:JFormattedTextField在focusLost& amp;更改setGroupingUsed(); focusGained

时间:2011-12-22 10:55:40

标签: java swing formatting caret jformattedtextfield

我有很多带有数字数据的JFormattedTextdields。我使用过DecimalFormat,InternationalFormatter,DocumentListener,还尝试过使用CaretPositionListener。

我面临的唯一问题是当数字输入增长并且分组字符介于其间时的插入位置。

如何在focusGained&上动态设置各个jformattedtextfields的DecimalFormat的setGroupingUsed(); onFocusLost。

任何想法或建议......

更新代码&问题: 当我尝试输入“12345”时,在添加“1234”时,逗号显示为“1,234”。这带来了3和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());
}

1 个答案:

答案 0 :(得分:0)

谢谢,

我通过创建管理我需要的一切的自定义文本字段来解决问题。任何改进的建议。上面添加了相关代码。