首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮子用JFormattedTextField

浮子用JFormattedTextField
EN

Stack Overflow用户
提问于 2013-11-06 20:34:05
回答 2查看 1.9K关注 0票数 0

当使用JFormattedTextField进行浮动时,我无法看到点后的部分。例如:如果我填写3.14,格式化的文本字段将此替换为3?

代码语言:javascript
复制
JFormattedTextField aR = new JFormattedTextField(new Float(0.00));

aR.addPropertyChangeListener("value", new PropertyChangeListener() {        
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        System.out.println(evt.getNewValue());      
    }
}); 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-06 20:45:29

代码语言:javascript
复制
For instance: if I fill in 3.14, the formatted text field replaces this to 3?

不太可能是3,而是3.1

,因为当您调用构造函数新JFormattedTextField(Object)时,它调用setValue(object)函数,该函数最终将通过调用getDefaultFormatterFactory(Object type)函数来尝试创建与object value类型相对应的formatter factory,其中为float创建的默认formatter如下所示:

代码语言:javascript
复制
if (type instanceof Number) {
            AbstractFormatter displayFormatter = new NumberFormatter();
            ((NumberFormatter)displayFormatter).setValueClass(type.getClass());
            AbstractFormatter editFormatter = new NumberFormatter(
                                  new DecimalFormat("#.#"));
            ((NumberFormatter)editFormatter).setValueClass(type.getClass());

            return new DefaultFormatterFactory(displayFormatter,
                                               displayFormatter,editFormatter);
        }

从这段代码中,您应该注意到它创建了带有掩码"#.#""#.#"。因此,尝试在DecimalFormat构造函数中添加带有掩码的"#.##"

代码语言:javascript
复制
JFormattedTextField feild = new JFormattedTextField(new DecimalFormat("#.##"));
feild.setValue(new Float(3.34)); 

你应该可以走了。

票数 5
EN

Stack Overflow用户

发布于 2013-11-06 20:46:13

  • 您需要设置放置在NumberFormatDecimalNumberFormat中的十进制数

。例如:

代码语言:javascript
复制
    FormattedTextField.setFormatterFactory(new AbstractFormatterFactory() {

        @Override
        public AbstractFormatter getFormatter(JFormattedTextField tf) {
            NumberFormat format = DecimalFormat.getInstance();
            format.setMinimumFractionDigits(2);
            format.setMaximumFractionDigits(2);
            format.setRoundingMode(RoundingMode.HALF_UP);
            InternationalFormatter formatter = new InternationalFormatter(format);
            formatter.setAllowsInvalid(false);
            formatter.setMinimum(0.0);
            formatter.setMaximum(1000.00);
            return formatter;
        }
    });
  • 也许将DocumentListener用于JTextComponent而不是PropertyChangeListener,取决于您是否希望侦听所有更改或最终结果。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19822241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档