如何使用 Literals 栏位

文本字段是基本的文本控件,使用户能够键入少量文本。当用户指示文本 Importing 完成时(通常通过按 Enter 键),文本字段将触发action event。如果您需要从用户那里获得多行 Importing,请使用text area

Swing API 为组件提供了几个类,这些组件可以是各种文本字段,也可以包括文本字段。

JTextField本节内容:基本文本字段。
JFormattedTextFieldJTextField子类,允许您指定用户可以 Importing 的合法字符集。参见如何使用格式化的文本字段
JPasswordFieldJTextField子类,不显示用户键入的字符。参见如何使用密码字段
JComboBox可以进行编辑,并提供一个可供选择的字符串 菜单。参见如何使用组合框
JSpinner将格式化的文本字段与几个小按钮结合在一起,使用户能够选择上一个或下一个可用值。参见如何使用微调器

下面的示例显示一个基本的文本字段和一个文本区域。文本字段是可编辑的。文本区域不可编辑。当用户在文本字段中按 Enter 键时,程序会将文本字段的内容复制到文本区域,然后选择文本字段中的所有文本。

TextDemo 的快照

单击启动按钮以使用Java™Web 开始(下载 JDK 7 或更高版本)运行 TextDemo。另外,要自己编译和运行示例,请查阅example index

您可以在TextDemo.java中找到该程序的完整代码。以下代码创建并设置文本字段:

textField = new JTextField(20);

传递给JTextField构造函数的整数参数(在示例中为20)指示字段中的列数。该数字与字段当前字体提供的度量一起使用,以计算字段的首选宽度。它不限制用户可以 Importing 的字符数。为此,您可以使用格式化文本字段或使用文档侦听器,如Literals 组件功能中所述。

Note:

我们建议您为每个文本字段指定列数。如果未指定列数或首选大小,则每当文本更改时,字段的首选大小都会更改,这可能会导致不必要的布局更新。

下一行代码将TextDemo对象注册为文本字段的操作侦听器。

textField.addActionListener(this);

actionPerformed方法处理来自文本字段的动作事件:

private final static String newline = "\n";
...
public void actionPerformed(ActionEvent evt) {
    String text = textField.getText();
    textArea.append(text + newline);
    textField.selectAll();
}

请注意,使用JTextFieldgetText方法来检索文本字段当前包含的文本。此方法返回的文本包含触发动作事件的 Enter 键的换行符。

您已经了解了如何使用基本文本字段。由于JTextField类继承自JTextComponent类,因此文本字段非常灵活,几乎可以按照您喜欢的任何方式进行自定义。例如,您可以添加文档侦听器或文档过滤器,以便在文本更改时得到通知,并且在过滤器的情况下,您可以相应地修改文本字段。有关文本组件的信息可以在Literals 组件功能中找到。但是,在自定义JTextField之前,请确保其他基于文本字段的组件中的一个不会为您完成这项工作。

通常,文本字段与描述文本字段的标签配对。有关创建这些对的指针,请参见使用文本字段的示例

另一个示例:TextFieldDemo

TextFieldDemo示例介绍了一个文本字段和一个文本区域。您可以在TextFieldDemo.java中找到该程序的完整代码。

在文本字段中键入字符时,程序将在文本区域中搜索键入的文本。如果找到该条目,它将突出显示。如果程序找不到该条目,则文本字段的背景变为粉红色。文本区域下方的状态栏会显示一条消息,指示是否找到文本。退出键用于开始新的搜索或完成当前搜索。这是TextFieldDemo应用程序的图片。

TextFieldDemo 的快照

单击启动按钮,然后使用Java™Web 开始(下载 JDK 7 或更高版本)运行 TextFieldDemo。另外,要自己编译和运行示例,请查阅example index

为了突出显示文本,本示例使用了荧光笔和绘画工具。下面的代码为文本区域创建并设置荧光笔和绘画工具。

final Highlighter hilit;
final Highlighter.HighlightPainter painter;
...
hilit = new DefaultHighlighter();
painter = new DefaultHighlighter.DefaultHighlightPainter(HILIT_COLOR);
textArea.setHighlighter(hilit);

此代码将文档侦听器添加到文本字段的文档中。

entry.getDocument().addDocumentListener(this);

文档侦听器的insertUpdateremoveUpdate方法调用search方法,该方法不仅在文本区域中执行搜索,而且还处理突出显示。以下代码突出显示找到的文本,将插入号设置为找到的匹配项的末尾,设置文本字段的默认背景,并在状态栏中显示一条消息。

hilit.addHighlight(index, end, painter);
textArea.setCaretPosition(end);
entry.setBackground(entryBg);
message("'" + s + "' found. Press ESC to end search");

状态栏是一个JLabel对象。下面的代码显示了message方法的实现方式。

private JLabel status;
...
void message(String msg) {
    status.setText(msg);
}

如果文本区域中没有匹配项,则以下代码将文本字段的背景更改为粉红色,并显示正确的信息消息。

entry.setBackground(ERROR_COLOR);
message("'" + s + "' not found. Press ESC to start a new search");

CancelAction类负责如下处理 Escape 键。

class CancelAction extends AbstractAction {
       public void actionPerformed(ActionEvent ev) {
               hilit.removeAllHighlights();
               entry.setText("");
               entry.setBackground(entryBg);
           }
   }

文本字段 API

下表列出了常用的JTextField构造函数和方法。您可能会调用的其他方法在JTextComponent类中定义。请参阅Literals 元件 API

您还可以在继承自文本字段其他祖先的文本字段上调用方法,例如setPreferredSizesetForegroundsetBackgroundsetFont等。有关常用继承方法的表,请参见JComponent 类

使用文本字段的 API 分为以下几类:

设置或获取字段的内容

方法或构造函数Purpose
JTextField()

JTextField(String)
JTextField(String, int)
JTextField(int)
创建文本字段。如果存在,则int参数以列为单位指定所需的宽度。 String参数包含字段的初始文本。
void setText(String)
String getText()
(在JTextComponent中定义)
设置或获取由文本字段显示的文本。

对该字段的外观进行微调

MethodPurpose
void setEditable(boolean)

boolean isEditable()
(在JTextComponent中定义)
设置或指示用户是否可以编辑文本字段中的文本。
void setColumns(int);
int getColumns()
设置或获取文本字段显示的列数。这实际上只是计算字段的首选宽度的提示。
void setHorizontalAlignment(int);
int getHorizontalAlignment()
设置或获取文本在其区域内水平对齐的方式。您可以使用JTextField.LEADINGJTextField.CENTERJTextField.TRAILING作为参数。

实现 site 的功能

MethodPurpose
void addActionListener(ActionListener)

void removeActionListener(ActionListener)
添加或删除操作侦听器。
void selectAll()
(在JTextComponent中定义)
选择文本字段中的所有字符。

使用文本字段的示例

下表显示了一些使用文本字段的示例,并指向描述这些示例的位置。有关在各种文本字段(例如,布局)中相似的代码示例,请查看相关组件(例如格式化的文本字段spinners)的示例列表。

ExampleWhere DescribedNotes
TextDemoThis section使用基本文本字段和动作侦听器的应用程序。
TextFieldDemoThis section使用文本字段和文本区域的应用程序。在文本区域中进行搜索以从文本字段中找到一个条目。
DialogDemo如何制作对话框CustomDialog.java包含一个文本字段,其值已选中。您可以通过单击“更多对话框”选项卡,选择“Importing 验证对话框”选项,然后单击“显示”来调出该对话框!按钮。
TextSamplerDemo使用 Literals 组件使用GridBagLayout和一种便捷方法布置标签文本字段对:

addLabelTextRows(JLabel[] labels,
JTextField[] textFields,
GridBagLayout gridbag,
Container container)
TextInputDemo如何使用格式化的文本字段使用SpringLayoutSpringUtilities便捷方法布置标签文本字段对:
makeCompactGrid(Container parent,
整数行,整数列,
int initialX,int initialY,
int xPad,int yPad)

如果您使用 JavaFX 编程,请参见Text Field