当使用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/