Module  java.desktop
软件包  javax.swing

Class JFormattedTextField

  • All Implemented Interfaces:
    ImageObserverMenuContainerSerializableAccessibleScrollableSwingConstants


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

    一旦创建了一个JFormattedTextField ,您可以通过添加PropertyChangeListener并监听PropertyChangeEvent s的属性名称value来监听编辑更改。

    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通常查询AbstractFormatterFactoryAbstractFormat在它获得或失去焦点。 虽然这可以根据焦点失去的政策而改变。 如果焦点失去的政策是JFormattedTextField.PERSISTJFormattedTextField已被编辑,则AbstractFormatterFactory将不会被查询,直到该值被提交。 类似地,如果焦点丢失策略为JFormattedTextField.COMMIT并且从stringToValue抛出异常,则在焦点丢失或获得时将不会查询AbstractFormatterFactory

    JFormattedTextField.AbstractFormatter还负责确定何时提交到JFormattedTextField值。 大约JFormattedTextField.AbstractFormatter s将使每个编辑都可以使用新的值,而其他的则不会提交该值。 您可以通过调用commitEdit从当前的JFormattedTextField.AbstractFormatter获取当前值。 commitEdit将在JFormattedTextField按下返回时被调用。

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

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

    警告:由于AbstractFormatter将通常在DocumentFilter上安装Document ,而NavigationFilter上的JFormattedTextField不应该自行安装。 如果这样做,您可能会看到奇怪的行为,因为AbstractFormatter的编辑策略将不会被执行。

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

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

    从以下版本开始:
    1.4
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • 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 AbstractFormatter被放置在一个AbstractFormatterFactory
        参数
        formatter - AbstractFormatter用于格式化。
      • JFormattedTextField

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

        public JFormattedTextField​(JFormattedTextField.AbstractFormatterFactory factory,
                                   Object currentValue)
        创建一个 JFormattedTextField与指定的 AbstractFormatterFactory和初始值。
        参数
        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.COMMIT或者JFormattedTextField.PERSIST注意某些AbstractFormatter ,因为它们发生S可推动变化,从而使该值将没有任何效果。

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

        此属性的默认值为JFormattedTextField.COMMIT_OR_REVERT

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

        public int getFocusLostBehavior​()
        返回焦点丢失时的行为。 这将是一个COMMIT_OR_REVERTCOMMITREVERT或者PERSIST注意某些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将根据使用Class的价值。 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 - 用于格式化的抽象格式
        另请参见:
        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​()
        当用户输入无效值时调用。 这使组件有机会提供反馈。 默认实现哔声。
      • processFocusEvent

        protected void processFocusEvent​(FocusEvent e)
        处理任何焦点事件,如 FocusEvent.FOCUS_GAINEDFocusEvent.FOCUS_LOST
        重写:
        processFocusEventComponent
        参数
        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()