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