模块 java.desktop

类 NumberFormatter

所有已实现的接口:
Serializable , Cloneable

public class NumberFormatter extends InternationalFormatter
NumberFormatter 子类 InternationalFormatter 添加数字的特殊行为。其中的特化是(这些仅在 NumberFormatter 不显示无效数字时使用,例如 setAllowsInvalid(false) ):
  • 在除指数字段之外的任何字段中按 +/-(- 由与 DecimalFormat 关联的 DecimalFormatSymbols 确定)将尝试将数字的符号更改为正/负。
  • 在指数字段中按 +/-(- 由与 DecimalFormat 关联的 DecimalFormatSymbols 确定)将尝试将指数的符号更改为正/负。

如果您正在显示科学数字,您可能希望打开覆盖模式,setOverwriteMode(true)。例如:

 DecimalFormat decimalFormat = new DecimalFormat("0.000E0");
 NumberFormatter textFormatter = new NumberFormatter(decimalFormat);
 textFormatter.setOverwriteMode(true);
 textFormatter.setAllowsInvalid(false);
 

如果要允许用户输入小数值,则应强制 DecimalFormat 至少包含一位小数 (#.0###),或者允许该值无效 setAllowsInvalid(true)。否则用户可能无法输入十进制值。

NumberFormatterstringToValue 提供与其超类略有不同的行为。如果您为值 DefaultFormatter.setValueClass(java.lang.Class<?>) 指定了一个类,它是 IntegerLongFloatDoubleByteShort 之一,并且格式的 parseObject 返回 Number 的实例,将创建值类的相应实例使用构造函数适用于值类表示的原始类型。例如:setValueClass(Integer.class) 将导致通过 Integer.valueOf(((Number)formatter.parseObject(string)).intValue()) 创建结果值。如果您希望设置最小/最大值,这通常很有用,因为各种 Number 实现通常无法相互比较。如果出于某种原因您需要特定的 Number 实现来实现您的值,这也很有用。

Warning: 此类的序列化对象将与未来的 Swing 版本不兼容。当前的序列化支持适用于运行相同版本 Swing 的应用程序之间的短期存储或 RMI。从 1.4 开始,对所有 JavaBeans 的长期存储的支持已添加到 java.beans 包中。请参阅 XMLEncoder

自从:
1.4
  • 构造方法详细信息

    • NumberFormatter

      public NumberFormatter()
      使用从 NumberFormat.getNumberInstance() 获得的默认 NumberFormat 实例创建一个 NumberFormatter
    • NumberFormatter

      public NumberFormatter(NumberFormat  format)
      使用指定的 Format 实例创建 NumberFormatter。
      参数:
      format - 用于指定合法值的格式
  • 方法详情

    • setFormat

      public void setFormat(Format  format)
      设置规定可以编辑和显示的合法值的格式。

      如果您使用了 nullary 构造函数,则将通过 NumberFormat.getNumberInstance() 方法为当前locale确定此属性的值。

      重写:
      setFormat 在类 InternationalFormatter
      参数:
      format - 用于指定合法值的 NumberFormat 实例