模块  java.desktop
软件包  javax.swing

Class JFormattedTextField

  • 实现的所有接口
    ImageObserverMenuContainerSerializableAccessibleScrollableSwingConstants

    @JavaBean
    public class JFormattedTextField
    extends JTextField
    JFormattedTextField扩展JTextField添加了对格式化任意值的支持,以及在用户编辑文本后检索特定对象。 以下说明配置JFormattedTextField以编辑日期:
      JFormattedTextField ftf = new JFormattedTextField();
       ftf.setValue(new Date()); 

    创建JFormattedTextField ,您可以通过添加PropertyChangeListener并使用属性名称value收听PropertyChangeEvent来监听编辑更改。

    JFormattedTextField允许配置丢失焦点时应采取的操作。 可能的配置是:

    Possible JFormattedTextField configurations and their descriptions Value Description JFormattedTextField.REVERT Revert the display to match that of getValue, possibly losing the current edit. JFormattedTextField.COMMIT Commits the current value. If the value being edited isn't considered a legal value by the AbstractFormatter that is, a ParseException is thrown, then the value will not change, and then edited value will persist. JFormattedTextField.COMMIT_OR_REVERT Similar to COMMIT, but if the value isn't legal, behave like REVERT. JFormattedTextField.PERSIST Do nothing, don't obtain a new AbstractFormatter, and don't update the value.
    默认值为JFormattedTextField.COMMIT_OR_REVERT ,有关详细信息,请参阅setFocusLostBehavior(int)

    JFormattedTextField允许焦点离开,即使当前编辑的值无效。 要在JFormattedTextField无效编辑状态时锁定焦点,可以附加InputVerifier 以下代码段显示了此类InputVerifier的潜在实现:

      public class FormattedTextFieldVerifier extends InputVerifier {
         public boolean verify(JComponent input) {
             if (input instanceof JFormattedTextField) {
                 JFormattedTextField ftf = (JFormattedTextField)input;
                 AbstractFormatter formatter = ftf.getFormatter();
                 if (formatter != null) {
                     String text = ftf.getText();
                     try {
                          formatter.stringToValue(text);
                          return true;
                      } catch (ParseException pe) {
                          return false;
                      }
                  }
              }
              return true;
          }
          public boolean shouldYieldFocus(JComponent input) {
              return verify(input);
          }
      } 

    或者,您可以调用commitEdit ,它也会提交值。

    JFormattedTextField不自行格式化,而是通过JFormattedTextField.AbstractFormatter的实例完成格式化,该实例是从JFormattedTextField.AbstractFormatterFactory的实例获得的。 JFormattedTextField.AbstractFormatter实例通过install方法激活时会通知实例,此时JFormattedTextField.AbstractFormatter可以安装所需的任何内容,通常为DocumentFilter 同样当JFormattedTextField不再需要AbstractFormatter ,它将调用uninstall

    JFormattedTextField通常在获得或失去焦点时查询AbstractFormatterFactory以获取AbstractFormat 虽然这可以根据焦点丢失政策而改变。 如果焦点丢失策略是JFormattedTextField.PERSISTJFormattedTextField已经被编辑,该AbstractFormatterFactory不会被查询,直到该值已提交。 同样,如果焦点丢失策略为JFormattedTextField.COMMIT并且从stringToValue抛出异常,则在失去焦点或获得焦点时将不会查询AbstractFormatterFactory

    JFormattedTextField.AbstractFormatter还负责确定何时将值提交给JFormattedTextField 一些JFormattedTextField.AbstractFormatter将在每次编辑时提供新值,而其他人将永远不会提交该值。 您可以通过调用commitEdit从当前JFormattedTextField.AbstractFormatter获取当前值。 commitEdit中按下返回时,将调用JFormattedTextField

    如果AbstractFormatterFactory尚未明确设置,一个将根据设置值类型的后setValue已被调用(假设值为非空)。 例如,在以下代码中,将创建适当的AbstractFormatterFactoryAbstractFormatter来处理数字格式:

      JFormattedTextField tf = new JFormattedTextField();
       tf.setValue(100); 

    警告:由于AbstractFormatter通常会安装一个DocumentFilterDocumentNavigationFilterJFormattedTextField ,你不应该自己安装。 如果这样做,您可能会看到奇怪的行为,因为AbstractFormatter的编辑策略将不会被强制执行。

    警告: Swing不是线程安全的。 有关更多信息,请参阅Swing's Threading Policy

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

    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • 字段详细信息

      • COMMIT

        public static final int COMMIT
        常量标识当焦点丢失时,应调用commitEdit 如果在提交新值时抛出ParseException ,则将保留无效值。
        另请参见:
        setFocusLostBehavior(int)常数字段值
      • COMMIT_OR_REVERT

        public static final int COMMIT_OR_REVERT
        常量识别焦点丢失时,应调用commitEdit 如果在提交新值时抛出ParseException ,则该值将被还原。
        另请参见:
        setFocusLostBehavior(int)常数字段值
      • REVERT

        public static final int REVERT
        常量识别当焦点丢失时,编辑值应恢复为 JFormattedTextField上设置的当前值。
        另请参见:
        setFocusLostBehavior(int)常数字段值
    • 构造方法详细信息

      • JFormattedTextField

        public JFormattedTextField()
        创建JFormattedTextField ,没有AbstractFormatterFactory 使用setMasksetFormatterFactory配置JFormattedTextField以编辑特定类型的值。
      • JFormattedTextField

        public JFormattedTextField​(Object value)
        创建具有指定值的JFormattedTextField。 这将创建一个AbstractFormatterFactory基于类型value
        参数
        value - JFormattedTextField的初始值
      • JFormattedTextField

        public JFormattedTextField​(Format format)
        创建一个JFormattedTextField format包装在适当的AbstractFormatter ,然后包装在AbstractFormatterFactory
        参数
        format - 用于查找AbstractFormatter的格式
      • JFormattedTextField

        public JFormattedTextField​(JFormattedTextField.AbstractFormatter formatter)
        创建JFormattedTextField具有指定AbstractFormatter AbstractFormatterAbstractFormatterFactory
        参数
        formatter - 用于格式化的AbstractFormatter。
      • JFormattedTextField

        public JFormattedTextField​(JFormattedTextField.AbstractFormatterFactory factory)
        创建 JFormattedTextField具有指定 AbstractFormatterFactory
        参数
        factory - 用于格式化的AbstractFormatterFactory。
      • JFormattedTextField

        public JFormattedTextField​(JFormattedTextField.AbstractFormatterFactory factory,
                                   Object currentValue)
        使用指定的 AbstractFormatterFactory和初始值创建 JFormattedTextField
        参数
        factory - AbstractFormatterFactory用于格式化。
        currentValue - 要使用的初始值
    • 方法详细信息

      • setFocusLostBehavior

        @BeanProperty(bound=false,
                      enumerationValues={"JFormattedTextField.COMMIT","JFormattedTextField.COMMIT_OR_REVERT","JFormattedTextField.REVERT","JFormattedTextField.PERSIST"},
                      description="Behavior when component loses focus")
        public void setFocusLostBehavior​(int behavior)
        设置焦点丢失时的行为。 这将是一个JFormattedTextField.COMMIT_OR_REVERTJFormattedTextField.REVERTJFormattedTextField.COMMITJFormattedTextField.PERSIST注意一些AbstractFormatter ,因为它们发生S可推动变化,从而使该值将没有任何效果。

        如果传入的对象不是上述值之一,则抛出IllegalArgumentException

        此属性的默认值为JFormattedTextField.COMMIT_OR_REVERT

        参数
        behavior - 识别焦点丢失时的行为
        异常
        IllegalArgumentException - 如果行为不是已知值之一
      • getFocusLostBehavior

        public int getFocusLostBehavior()
        返回焦点丢失时的行为。 这将是一个COMMIT_OR_REVERTCOMMITREVERTPERSIST注意一些AbstractFormatter ,因为它们发生S可推动变化,从而使该值将没有任何效果。
        结果
        当焦点丢失时返回行为
      • setFormatterFactory

        @BeanProperty(visualUpdate=true,
                      description="AbstractFormatterFactory, responsible for returning an AbstractFormatter that can format the current value.")
        public void setFormatterFactory​(JFormattedTextField.AbstractFormatterFactory tf)
        设置AbstractFormatterFactory AbstractFormatterFactory能够返回用于格式化显示值的AbstractFormatter实例,以及强制执行编辑策略。

        如果您没有明确设置AbstractFormatterFactory用此方法(或构造函数)的方式AbstractFormatterFactory ,因此一个AbstractFormatter将根据使用的价值。 NumberFormatter将用于Number s, DateFormatter将用于Dates ,否则将使用DefaultFormatter

        这是一个JavaBeans绑定属性。

        参数
        tf - AbstractFormatterFactory用于查找 AbstractFormatter实例
      • setFormatter

        protected void setFormatter​(JFormattedTextField.AbstractFormatter format)
        设置当前AbstractFormatter

        您通常不应该调用它,而是设置AbstractFormatterFactory或设置值。 JFormattedTextField将调用此为一体的状态JFormattedTextField的变化和需要将重置值。 JFormattedTextField传递AbstractFormatter获得的AbstractFormatterFactory

        这是一个JavaBeans绑定属性。

        参数
        format - 用于格式化的AbstractFormatter
        另请参见:
        setFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
      • setValue

        @BeanProperty(visualUpdate=true,
                      description="The value to be formatted.")
        public void setValue​(Object value)
        设置将从当前AbstractFormatterFactory获得的AbstractFormatter格式化的值。 如果未指定AbstractFormatterFactory ,则将尝试根据value的类型创建一个。

        此属性的默认值为null。

        这是一个JavaBeans绑定属性。

        参数
        value - 要显示的当前值
      • getValue

        public Object getValue()
        返回最后一个有效值。 根据AbstractFormatter的编辑政策,这可能不会返回当前值。 当前编辑的值可以通过调用能够得到commitEdit随后getValue
        结果
        上一个有效值
      • commitEdit

        public void commitEdit()
                        throws ParseException
        强制从AbstractFormatter获取当前值并将其设置为当前值。 如果没有安装当前的AbstractFormatter ,则AbstractFormatter
        异常
        ParseException - 如果 AbstractFormatter无法格式化当前值
      • isEditValid

        @BeanProperty(bound=false)
        public boolean isEditValid()
        如果正在编辑的当前值有效,则返回true。 它的值由当前的AbstractFormatter管理,因此没有公共设置器。
        结果
        如果正在编辑的当前值有效,则为true。
      • invalidEdit

        protected void invalidEdit()
        用户输入无效值时调用。 这使组件有机会提供反馈。 默认实现发出哔哔声。
      • processInputMethodEvent

        protected void processInputMethodEvent​(InputMethodEvent e)
        处理任何输入方法事件,例如 InputMethodEvent.INPUT_METHOD_TEXT_CHANGEDInputMethodEvent.CARET_POSITION_CHANGED
        重写:
        processInputMethodEventComponent
        参数
        e - InputMethodEvent
        另请参见:
        InputMethodEvent
      • processFocusEvent

        protected void processFocusEvent​(FocusEvent e)
        处理任何焦点事件,例如 FocusEvent.FOCUS_GAINEDFocusEvent.FOCUS_LOST
        重写:
        processFocusEvent Component
        参数
        e - FocusEvent
        另请参见:
        FocusEvent
      • getActions

        @BeanProperty(bound=false)
        public Action[] getActions()
        获取编辑器的命令列表。 这是插件UI支持的命令列表,由编辑器本身支持的命令集合增强。 这些对于绑定事件很有用,例如在键映射中。
        重写:
        getActionsJTextField
        结果
        命令列表
      • setDocument

        @BeanProperty(expert=true,
                      description="the text document model")
        public void setDocument​(Document doc)
        将编辑器与文本文档关联。 当前注册的工厂用于构建文档的视图,在重新验证后由编辑器显示。 PropertyChange事件(“document”)传播到每个侦听器。
        重写:
        setDocumentJTextField
        参数
        doc - 要显示/编辑的文档
        另请参见:
        JTextComponent.getDocument()