Module java.desktop
Package javax.swing.text

Class NumberFormatter

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

public class NumberFormatter extends InternationalFormatter
NumberFormatterInternationalFormatter 的子类,为数字添加特殊行为。特殊化包括以下内容(仅当 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 实现,这也很有用。

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

自版本:
1.4
  • Constructor Details

    • NumberFormatter

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

      public NumberFormatter(NumberFormat format)
      使用指定的 Format 实例创建一个 NumberFormatter。
      参数:
      format - 用于规定合法值的格式
  • Method Details

    • setFormat

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

      如果您使用了无参构造函数,则此属性的值将通过 NumberFormat.getNumberInstance() 方法根据当前区域设置确定。

      覆盖:
      setFormat 在类 InternationalFormatter
      参数:
      format - 用于规定合法值的 NumberFormat 实例