当使用JFormattedTextField进行浮动时,我无法看到点后的部分。例如:如果我填写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());
}
}); 发布于 2013-11-06 20:45:29
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如下所示:
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 feild = new JFormattedTextField(new DecimalFormat("#.##"));
feild.setValue(new Float(3.34)); 你应该可以走了。
发布于 2013-11-06 20:46:13
NumberFormat,DecimalNumberFormat中的十进制数。例如:
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,取决于您是否希望侦听所有更改或最终结果。https://stackoverflow.com/questions/19822241
复制相似问题