Module java.desktop
Package javax.swing

Class JTextField

所有已实现的接口:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable, SwingConstants
直接已知的子类:
DefaultTreeCellEditor.DefaultTextField, JFormattedTextField, JPasswordField

@JavaBean(defaultProperty="UIClassID", description="A component which allows for the editing of a single line of text.") public class JTextField extends JTextComponent implements SwingConstants
JTextField是一个轻量级组件,允许编辑单行文本。有关文本字段的信息和示例,请参阅Java教程中的如何使用文本字段

JTextField旨在与java.awt.TextField在合理的情况下保持源代码兼容。此组件具有java.awt.TextField类中找不到的功能。应查阅超类以获取额外功能。

JTextField有一个方法用于设置作为触发的动作事件的命令字符串。 java.awt.TextField使用字段的文本作为ActionEvent的命令字符串。如果未使用setActionCommand方法设置命令字符串,则JTextField将使用字段的文本,以与java.awt.TextField兼容。

未直接提供setEchoChargetEchoChar方法,以避免新的可插拔外观意外暴露密码字符。为提供类似密码的服务,一个单独的类JPasswordField扩展了JTextField以提供此服务,具有独立的可插拔外观。

java.awt.TextField可以通过为TextEvent添加TextListener来监视更改。在基于JTextComponent的组件中,更改通过DocumentEvent从模型广播到DocumentListeners。如果需要,DocumentEvent会提供更改的位置和更改的类型。代码片段可能如下所示:


     DocumentListener myListener = ??;
     JTextField myArea = ??;
     myArea.getDocument().addDocumentListener(myListener);
 

JTextField的水平对齐方式可以设置为左对齐、前导对齐、居中、右对齐或尾随对齐。如果字段文本的所需大小小于为其分配的大小,则右/尾随对齐很有用。这由setHorizontalAlignmentgetHorizontalAlignment方法确定。默认为前导对齐。

文本字段如何消耗VK_ENTER事件取决于文本字段是否有任何动作侦听器。如果有,那么VK_ENTER会导致侦听器收到ActionEvent,并且VK_ENTER事件会被消耗。这与AWT文本字段处理VK_ENTER事件的方式兼容。如果文本字段没有动作侦听器,则从v 1.3开始,VK_ENTER事件不会被消耗。相反,祖先组件的绑定将被处理,这使得JFC/Swing的默认按钮功能能够工作。

可以通过扩展模型并更改提供的默认模型轻松创建自定义字段。例如,以下代码片段将创建一个仅包含大写字符的字段。即使从剪贴板粘贴文本或通过编程更改文本,它也可以正常工作。



 public class UpperCaseField extends JTextField {
 
     public UpperCaseField(int cols) {
         super(cols);
     }
 
     protected Document createDefaultModel() {
         return new UpperCaseDocument();
     }
 
     static class UpperCaseDocument extends PlainDocument {
 
         public void insertString(int offs, String str, AttributeSet a)
             throws BadLocationException {
 
             if (str == null) {
                 return;
             }
             char[] upper = str.toCharArray();
             for (int i = 0; i < upper.length; i++) {
                 upper[i] = Character.toUpperCase(upper[i]);
             }
             super.insertString(offs, new String(upper), a);
         }
     }
 }

 

警告: Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略

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

自Java版本:
1.2
参见:
  • Field Details

    • notifyAction

      public static final String notifyAction
      发送通知,指示字段内容已被接受的操作名称。通常绑定到回车键。
      参见:
  • Constructor Details

    • JTextField

      public JTextField()
      构造一个新的TextField。创建一个默认模型,初始字符串为null,列数设置为0。
    • JTextField

      public JTextField(String text)
      构造一个初始化为指定文本的新TextField。创建一个默认模型,列数为0。
      参数:
      text - 要显示的文本,或null
    • JTextField

      public JTextField(int columns)
      构造一个新的空TextField,具有指定的列数。创建一个默认模型,初始字符串设置为null
      参数:
      columns - 用于计算首选宽度的列数;如果列数设置为零,则首选宽度将根据组件实现自然结果
    • JTextField

      public JTextField(String text, int columns)
      构造一个初始化为指定文本和列数的新TextField。创建一个默认模型。
      参数:
      text - 要显示的文本,或者null
      columns - 用于计算首选宽度的列数;如果将列设置为零,则首选宽度将是组件实现自然产生的任何宽度
    • JTextField

      public JTextField(Document doc, String text, int columns)
      构造一个使用给定文本存储模型和给定列数的新JTextField。这是其他构造函数通过的构造函数。如果文档为null,则会创建一个默认模型。
      参数:
      doc - 要使用的文本存储;如果为null,将通过调用createDefaultModel方法提供默认值
      text - 要显示的初始字符串,或者null
      columns - 用于计算首选宽度的列数 >= 0;如果将columns设置为零,则首选宽度将是组件实现自然产生的任何宽度
      抛出:
      IllegalArgumentException - 如果columns < 0
  • Method Details

    • getUIClassID

      @BeanProperty(bound=false) public String getUIClassID()
      获取UI的类ID。
      覆盖:
      getUIClassID 在类 JComponent
      返回:
      字符串"TextFieldUI"
      参见:
    • setDocument

      @BeanProperty(expert=true, description="the text document model") public void setDocument(Document doc)
      将编辑器与文本文档关联。当前注册的工厂用于为文档构建一个视图,该视图在重新验证后由编辑器显示。将向每个侦听器传播PropertyChange事件("document")。
      覆盖:
      setDocument 在类 JTextComponent
      参数:
      doc - 要显示/编辑的文档
      参见:
    • isValidateRoot

      public boolean isValidateRoot()
      来自文本字段本身的revalidate调用将通过验证文本字段来处理,除非文本字段包含在JViewport中,在这种情况下返回false。
      覆盖:
      isValidateRoot 在类 JComponent
      返回:
      如果此文本字段的父级是JViewPort,则返回false,否则返回true
      参见:
    • getHorizontalAlignment

      public int getHorizontalAlignment()
      返回文本的水平对齐方式。有效的键是:
      • JTextField.LEFT
      • JTextField.CENTER
      • JTextField.RIGHT
      • JTextField.LEADING
      • JTextField.TRAILING
      返回:
      水平对齐方式
    • setHorizontalAlignment

      @BeanProperty(preferred=true, enumerationValues={"JTextField.LEFT","JTextField.CENTER","JTextField.RIGHT","JTextField.LEADING","JTextField.TRAILING"}, description="Set the field alignment to LEFT, CENTER, RIGHT, LEADING (the default) or TRAILING") public void setHorizontalAlignment(int alignment)
      设置文本的水平对齐方式。有效的键是:
      • JTextField.LEFT
      • JTextField.CENTER
      • JTextField.RIGHT
      • JTextField.LEADING
      • JTextField.TRAILING
      当设置对齐方式时,将调用invalidaterepaint,并触发PropertyChange事件("horizontalAlignment")。
      参数:
      alignment - 对齐方式
      抛出:
      IllegalArgumentException - 如果alignment不是有效的键
    • createDefaultModel

      protected Document createDefaultModel()
      如果没有明确给出模型,则创建要在构造时使用的模型的默认实现。将返回PlainDocument的实例。
      返回:
      默认模型实现
    • getColumns

      public int getColumns()
      返回此TextField中的列数。
      返回:
      列数 >= 0
    • setColumns

      @BeanProperty(bound=false, description="the number of columns preferred for display") public void setColumns(int columns)
      设置此TextField中的列数,然后使布局失效。
      参数:
      columns - 列数 >= 0
      抛出:
      IllegalArgumentException - 如果columns小于0
    • getColumnWidth

      protected int getColumnWidth()
      返回列宽。对于某些字体,列的含义可以被认为是一个相当弱的概念。此方法用于定义列的宽度。默认情况下,这被定义为所使用字体的字符m的宽度。此方法可以重新定义为某些替代量
      返回:
      列宽度 >= 1
    • getPreferredSize

      public Dimension getPreferredSize()
      返回此TextField所需的首选大小Dimensions。如果设置了非零列数,则宽度设置为列乘以列宽度。
      覆盖:
      getPreferredSize 在类 JComponent
      返回:
      此文本字段的尺寸
      参见:
    • setFont

      public void setFont(Font f)
      设置当前字体。这将删除缓存的行高和列宽,以便新字体将被反映。设置字体后调用revalidate
      覆盖:
      setFont 在类 JComponent
      参数:
      f - 新字体
      参见:
    • addActionListener

      public void addActionListener(ActionListener l)
      将指定的动作侦听器添加到从此文本字段接收动作事件。
      参数:
      l - 要添加的动作侦听器
    • removeActionListener

      public void removeActionListener(ActionListener l)
      删除指定的动作侦听器,以便它不再从此文本字段接收动作事件。
      参数:
      l - 要移除的动作侦听器
    • getActionListeners

      @BeanProperty(bound=false) public ActionListener[] getActionListeners()
      返回使用addActionListener()添加到此JTextField的所有ActionListener的数组。
      返回:
      所有已添加的ActionListener或如果未添加任何侦听器,则返回空数组
      自1.4起
    • fireActionPerformed

      protected void fireActionPerformed()
      通知所有已注册对此事件类型的通知感兴趣的侦听器。事件实例是懒惰创建的。侦听器列表按照从后到前的顺序处理。
      参见:
    • setActionCommand

      public void setActionCommand(String command)
      设置用于动作事件的命令字符串。
      参数:
      command - 命令字符串
    • setAction

      @BeanProperty(visualUpdate=true, description="the Action instance connected with this ActionEvent source") public void setAction(Action a)
      设置ActionActionEvent源的Action。新的Action替换任何先前设置的Action,但不会影响独立使用addActionListener添加的ActionListeners。如果Action已经是ActionEvent源的注册ActionListener,则不会重新注册。

      设置Action会立即更改所有描述在支持Action的Swing组件中的属性。随后,文本字段的属性将自动更新为Action的属性更改。

      此方法使用其他三种方法来设置和帮助跟踪Action的属性值。它使用configurePropertiesFromAction方法立即更改文本字段的属性。为了跟踪Action的属性值的更改,此方法注册createActionPropertyChangeListener返回的PropertyChangeListener。默认的PropertyChangeListenerAction中的属性更改时调用actionPropertyChanged方法。

      参数:
      a - 用于JTextFieldAction,或者null
      自1.3起
      参见:
    • getAction

      public Action getAction()
      返回为此ActionEvent源当前设置的Action,如果未设置Action,则返回null
      返回值:
      ActionEvent 源的 Action,或 null
      自版本:
      1.3
      参见:
    • configurePropertiesFromAction

      protected void configurePropertiesFromAction(Action a)
      将此文本字段上的属性设置为与指定 Action 中的属性相匹配。有关此设置的属性的更多详细信息,请参阅 支持 Action 的 Swing 组件
      参数:
      a - 从中获取属性的 Action,或 null
      自版本:
      1.3
      参见:
    • actionPropertyChanged

      protected void actionPropertyChanged(Action action, String propertyName)
      根据关联操作中的属性更改更新文本字段的状态。此方法从 createActionPropertyChangeListener 返回的 PropertyChangeListener 中调用。通常子类不需要调用此方法。支持其他 Action 属性的子类应该重写此方法和 configurePropertiesFromAction

      请参阅 支持 Action 的 Swing 组件 表格,了解此方法设置的属性列表。

      参数:
      action - 与此文本字段关联的 Action
      propertyName - 更改的属性名称
      自版本:
      1.6
      参见:
    • createActionPropertyChangeListener

      protected PropertyChangeListener createActionPropertyChangeListener(Action a)
      创建并返回一个负责监听指定 Action 的更改并更新相应属性的 PropertyChangeListener

      警告: 如果您对此进行子类化,请不要创建匿名内部类。如果这样做,文本字段的生命周期将与 Action 的生命周期绑定。

      参数:
      a - 文本字段的操作
      返回值:
      负责监听指定 Action 的更改并更新相应属性的 PropertyChangeListener
      自版本:
      1.3
      参见:
    • getActions

      @BeanProperty(bound=false) public Action[] getActions()
      获取编辑器的命令列表。这是插入式 UI 支持的命令列表,加上编辑器本身支持的命令集合。这些对于绑定到事件非常有用,例如在键映射中。
      覆盖:
      getActions 在类 JTextComponent
      返回值:
      命令列表
    • postActionEvent

      public void postActionEvent()
      通过将其分派给任何已注册的 ActionListener 对象来处理在此文本字段上发生的操作事件。通常由注册到文本字段的控制器调用。
    • getHorizontalVisibility

      @BeanProperty(bound=false) public BoundedRangeModel getHorizontalVisibility()
      获取文本字段的可见性。如果字段的大小大于为字段分配的区域,则可以调整此值以更改可见区域的位置。

      外观实现管理 BoundedRangeModel 上的最小、最大和范围属性的值。

      返回值:
      可见性
      参见:
    • getScrollOffset

      public int getScrollOffset()
      获取滚动偏移量,以像素为单位。
      返回值:
      偏移量 >= 0
    • setScrollOffset

      public void setScrollOffset(int scrollOffset)
      设置滚动偏移量,以像素为单位。
      参数:
      scrollOffset - 偏移量 >= 0
    • scrollRectToVisible

      public void scrollRectToVisible(Rectangle r)
      将字段向左或向右滚动。
      覆盖:
      scrollRectToVisible 在类 JComponent
      参数:
      r - 要滚动的区域
      参见:
    • paramString

      protected String paramString()
      返回此 JTextField 的字符串表示形式。此方法仅用于调试目的,返回的字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不能为 null
      覆盖:
      paramString 在类 JTextComponent
      返回值:
      JTextField 的字符串表示形式
    • getAccessibleContext

      @BeanProperty(bound=false) public AccessibleContext getAccessibleContext()
      获取与此 JTextField 关联的 AccessibleContext。对于 JTextFieldsAccessibleContext 采用 AccessibleJTextField 的形式。如有必要,将创建一个新的 AccessibleJTextField 实例。
      指定者:
      getAccessibleContext 在接口 Accessible
      覆盖:
      getAccessibleContext 在类 JTextComponent
      返回值:
      作为此 JTextFieldAccessibleContextAccessibleJTextField