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)
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)函数,其中默认formatter为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);
}
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)
你应该好好去.