JFormattedTextField,接受值 [0.1, 100],写数字不舒服
JFormattedTextField, accept values [0.1, 100], uncomfortable writing of numbers
我正在尝试使用 AbstractFormatter
将 JFormatdedTextField 中的输入值限制为 [0.1, 100]
public AbstractFormatter getFormatter(JFormattedTextField tf) {
NumberFormat f = DecimalFormat.getInstance();
f.setMinimumFractionDigits(1);
f.setMaximumFractionDigits(2);
InternationalFormatter iff= new InternationalFormatter(f);
iff.setAllowsInvalid(false);
iff.setMinimum(0.1);
iff.setMaximum(100.00);
return iff;
}
但是,抽象格式化程序有一个奇怪的行为。假设我想在区间内写下以下数字:0.2.
abstract formatter阻塞了第一个数字:0。需要分2个阶段写0.2:
a] 1.2 //or any digit > 0
b] delete 1: 1.2->0.2
这样的行为会让用户感到困惑。有什么办法可以避免这种不舒适的数字书写方式吗?
感谢您的帮助。
我认为你需要的是 JSPinner
:
JSpinner spin = new JSpinner(new SpinnerNumberModel(50 /*or whatever*/, 0.1, 100, 0.1));
或者您可以删除行
iff.setAllowsInvalid(false);
消除混淆行为。此方法的 Javadocs 说:
Sets whether or not the value being edited is allowed to be invalid
for a length of time (that is, stringToValue throws a ParseException).
It is often convenient to allow the user to temporarily input an
invalid value.
如果值无效,这些将使焦点离开组件,并将恢复为以前的有效值。如果你不想让失去焦点使用输入验证器,如评论中所述。 JFormattedTextField
的Javadocs中有一个例子:http://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html
我正在尝试使用 AbstractFormatter
将 JFormatdedTextField 中的输入值限制为 [0.1, 100]public AbstractFormatter getFormatter(JFormattedTextField tf) {
NumberFormat f = DecimalFormat.getInstance();
f.setMinimumFractionDigits(1);
f.setMaximumFractionDigits(2);
InternationalFormatter iff= new InternationalFormatter(f);
iff.setAllowsInvalid(false);
iff.setMinimum(0.1);
iff.setMaximum(100.00);
return iff;
}
但是,抽象格式化程序有一个奇怪的行为。假设我想在区间内写下以下数字:0.2.
abstract formatter阻塞了第一个数字:0。需要分2个阶段写0.2:
a] 1.2 //or any digit > 0
b] delete 1: 1.2->0.2
这样的行为会让用户感到困惑。有什么办法可以避免这种不舒适的数字书写方式吗?
感谢您的帮助。
我认为你需要的是 JSPinner
:
JSpinner spin = new JSpinner(new SpinnerNumberModel(50 /*or whatever*/, 0.1, 100, 0.1));
或者您可以删除行
iff.setAllowsInvalid(false);
消除混淆行为。此方法的 Javadocs 说:
Sets whether or not the value being edited is allowed to be invalid for a length of time (that is, stringToValue throws a ParseException). It is often convenient to allow the user to temporarily input an invalid value.
如果值无效,这些将使焦点离开组件,并将恢复为以前的有效值。如果你不想让失去焦点使用输入验证器,如评论中所述。 JFormattedTextField
的Javadocs中有一个例子:http://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html