JFormattedTextField,接受值[0.1,100],不舒服的写数字

时间:2017-01-13 22:58:48

标签: java swing restriction jformattedtextfield

我试图使用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

这种行为会让用户感到困惑。有没有办法防止这种令人不舒服的数字写作?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我认为您需要的是JSPinner

JSpinner spin = new JSpinner(new SpinnerNumberModel(50 /*or whatever*/, 0.1, 100, 0.1));

或者您可以删除该行

iff.setAllowsInvalid(false);

删除令人困惑的行为。这种方法的Javadocs说:

  

设置是否允许正在编辑的值无效   一段时间(即stringToValue抛出ParseException)。   允许用户临时输入通常很方便   无效值

如果值无效,这些将使焦点离开组件,并且它将恢复为先前的有效值。如果您不想让失去焦点,请使用输入验证程序,如评论中所述。 Javadoc中有一个例子JFormattedTextFieldhttp://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html