我试图使用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。
抽象格式化程序阻塞第一个数字:0。必须分两个阶段写入0.2:
a] 1.2 //or any digit > 0
b] delete 1: 1.2->0.2
这种行为会让用户感到困惑。有没有办法防止这种令人不舒服的数字写作?
感谢您的帮助。
答案 0 :(得分:1)
我认为您需要的是JSPinner
:
JSpinner spin = new JSpinner(new SpinnerNumberModel(50 /*or whatever*/, 0.1, 100, 0.1));
或者您可以删除该行
iff.setAllowsInvalid(false);
删除令人困惑的行为。这种方法的Javadocs说:
设置是否允许正在编辑的值无效 一段时间(即stringToValue抛出ParseException)。 允许用户临时输入通常很方便 无效值。
如果值无效,这些将使焦点离开组件,并且它将恢复为先前的有效值。如果您不想让失去焦点,请使用输入验证程序,如评论中所述。 Javadoc中有一个例子JFormattedTextField
:http://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html