【问题标题】:Java : JFormattedTextField change setGroupingUsed() on focusLost & focusGainedJava:JFormattedTextField 在 focusLost 和 focusGained 上更改 setGroupingUsed()
【发布时间】:2011-12-22 10:55:40
【问题描述】:

我有许多 JFormattedTextdields,其中包含数字数据。我用过 DecimalFormat、InternationalFormatter、DocumentListener,也试过 CaretPositionListener。

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

如何在 focusGained 和 onFocusLost 上动态设置相应 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

标签: java swing formatting caret jformattedtextfield


【解决方案1】:

谢谢,

我通过创建一个自定义文本字段来管理我需要的所有内容。任何改进建议。上面添加了有问题的代码。

【讨论】:

  • 每个更好的 AutoCompleted JComboBox/JtexField 都实现了 set & moveCaret,然后没有关于 JTextField,而是从 JComboBox 中提取 JTextComponent
  • @mKorbel,问题出在输入文本时。由于分组“,”出现,所以插入符号是 1 位数字。我在 focusGained 时将分组设置为 false,在 focusLost 时将分组恢复为 true。这对我有帮助。至于你提到的,他们有比我更好的解决方案吗?
  • 检查 AutoCompleted JComboBox/JtexField,你可以放 50 个,每个都记得最后一个 Carret 和选择,但另一方面很难回答你的问题,因为你谈论的是没有代码的高级解决方法,当然这里有一些优秀的 Swing 编码器,但没有代码,没有答案 :-)
  • @mKorbel,最初我添加了所有细节 - 我面临的问题和代码。但 Andrew 和其他用户也提到了 SSCCE。我编辑了 2-3 次,但没有找到任何回复。
  • :-) 这些 Swing 大师知道 10 到 15 种,也许有 100 种变化,什么时候、什么时候、什么时候会发生什么...... :-) 那你为什么会感到惊讶,
猜你喜欢
  • 2011-01-23
  • 1970-01-01
  • 2014-03-14
  • 2018-06-07
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多