java - 用于 float 的 JFormattedTextField

标签 java swing jformattedtextfield

当使用JFormattedTextField作为 float 时,我无法看到点后面的部分。例如:如果我填写 3.14,格式化文本字段会将其替换为 3?

JFormattedTextField aR = new JFormattedTextField(new Float(0.00));

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

最佳答案

For instance: if I fill in 3.14, the formatted text field replaces this to 3?

不太可能是3,而是3.1

因为当您调用构造函数 new JFormattedTextField(Object) 时,它会调用 setValue(object) 函数,该函数最终会尝试创建一个formatterfactory通过调用getDefaultFormatterFactory(Object type)函数对应object value的Type,其中默认的formatter for float 创建如下:

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。 因此,请尝试在 JFormattedTextField 构造函数中添加带有掩码 "#.##"DecimalFormat:

JFormattedTextField feild = new JFormattedTextField(new DecimalFormat("#.##"));
feild.setValue(new Float(3.34)); 

你应该可以开始了。

关于java - 用于 float 的 JFormattedTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19822241/

相关文章:

Java 新长(0)

java - 如何将 JPanel 高度设置为自动

java - 如何设置 JFormattedTextField 的格式

java - 无法使用 Cucumber + Selenium Webdriver + Chrome + Capybara 测试远程 HTML/CSS/JS/Java 网站

java - 如何添加项目以在任何地方使用而不更改另一个项目中的任何内容

Java Android Arraylist字符串到ArrayList自定义类

java - 如何以编程方式检查 JFormattedTextField 允许输入的内容?

java - 如何更改实现 MigLayout 的 JDesktopPane 中显示的 JInternalFrame 的大小?

java - 如何获得链接到 JButton 的 JLabel?

java - 如何清除掩码格式的 Jformattedtextfield