浮点数的JFormattedTextField

Mat*_*ias 0 java swing jformattedtextfield

当使用JFormattedTextFieldfor浮动时,我无法看到点后面的部分.例如:如果我填写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());      
    }
}); 
Run Code Online (Sandbox Code Playgroud)

Sag*_*age 5

For instance: if I fill in 3.14, the formatted text field replaces this to 3?
Run Code Online (Sandbox Code Playgroud)

不太可能3,但是3.1.

因为当你调用构造新的JFormattedTextField(Object),它调用setValue(object)函数最终将尝试创建一个formatter factory对应的类型object value,通过调用getDefaultFormatterFactory(Object type)函数,其中默认formatterfloat创建如下:

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);
        }
Run Code Online (Sandbox Code Playgroud)

从这段代码中,你应该注意到它创建了DecimalFormatwith mask "#.#".所以尝试在构造函数中添加DecimalFormatwith mask :"#.##"JFormattedTextField

JFormattedTextField feild = new JFormattedTextField(new DecimalFormat("#.##"));
feild.setValue(new Float(3.34)); 
Run Code Online (Sandbox Code Playgroud)

你应该好好去.