如何使用 Literals 栏位
文本字段是基本的文本控件,使用户能够键入少量文本。当用户指示文本 Importing 完成时(通常通过按 Enter 键),文本字段将触发action event。如果您需要从用户那里获得多行 Importing,请使用text area。
Swing API 为组件提供了几个类,这些组件可以是各种文本字段,也可以包括文本字段。
JTextField | 本节内容:基本文本字段。 |
JFormattedTextField |
JTextField 子类,允许您指定用户可以 Importing 的合法字符集。参见如何使用格式化的文本字段。 |
JPasswordField |
JTextField 子类,不显示用户键入的字符。参见如何使用密码字段。 |
JComboBox |
可以进行编辑,并提供一个可供选择的字符串 菜单。参见如何使用组合框。 |
JSpinner |
将格式化的文本字段与几个小按钮结合在一起,使用户能够选择上一个或下一个可用值。参见如何使用微调器。 |
下面的示例显示一个基本的文本字段和一个文本区域。文本字段是可编辑的。文本区域不可编辑。当用户在文本字段中按 Enter 键时,程序会将文本字段的内容复制到文本区域,然后选择文本字段中的所有文本。
单击启动按钮以使用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();
}
请注意,使用JTextField
的getText
方法来检索文本字段当前包含的文本。此方法返回的文本不包含触发动作事件的 Enter 键的换行符。
您已经了解了如何使用基本文本字段。由于JTextField
类继承自JTextComponent
类,因此文本字段非常灵活,几乎可以按照您喜欢的任何方式进行自定义。例如,您可以添加文档侦听器或文档过滤器,以便在文本更改时得到通知,并且在过滤器的情况下,您可以相应地修改文本字段。有关文本组件的信息可以在Literals 组件功能中找到。但是,在自定义JTextField
之前,请确保其他基于文本字段的组件中的一个不会为您完成这项工作。
通常,文本字段与描述文本字段的标签配对。有关创建这些对的指针,请参见使用文本字段的示例。
另一个示例:TextFieldDemo
TextFieldDemo
示例介绍了一个文本字段和一个文本区域。您可以在TextFieldDemo.java中找到该程序的完整代码。
在文本字段中键入字符时,程序将在文本区域中搜索键入的文本。如果找到该条目,它将突出显示。如果程序找不到该条目,则文本字段的背景变为粉红色。文本区域下方的状态栏会显示一条消息,指示是否找到文本。退出键用于开始新的搜索或完成当前搜索。这是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);
文档侦听器的insertUpdate
和removeUpdate
方法调用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。
您还可以在继承自文本字段其他祖先的文本字段上调用方法,例如setPreferredSize
,setForeground
,setBackground
,setFont
等。有关常用继承方法的表,请参见JComponent 类。
使用文本字段的 API 分为以下几类:
方法或构造函数 | Purpose |
---|---|
JTextField() | |
JTextField(String) JTextField(String, int) JTextField(int) |
创建文本字段。如果存在,则int 参数以列为单位指定所需的宽度。 String 参数包含字段的初始文本。 |
void setText(String) String getText() (在 JTextComponent 中定义) |
设置或获取由文本字段显示的文本。 |
Method | Purpose |
---|---|
void setEditable(boolean) | |
boolean isEditable() (在 JTextComponent 中定义) |
设置或指示用户是否可以编辑文本字段中的文本。 |
void setColumns(int); int getColumns() |
设置或获取文本字段显示的列数。这实际上只是计算字段的首选宽度的提示。 |
void setHorizontalAlignment(int); int getHorizontalAlignment() |
设置或获取文本在其区域内水平对齐的方式。您可以使用JTextField.LEADING ,JTextField.CENTER 和JTextField.TRAILING 作为参数。 |
Method | Purpose |
---|---|
void addActionListener(ActionListener) | |
void removeActionListener(ActionListener) |
添加或删除操作侦听器。 |
void selectAll() (在 JTextComponent 中定义) |
选择文本字段中的所有字符。 |
使用文本字段的示例
下表显示了一些使用文本字段的示例,并指向描述这些示例的位置。有关在各种文本字段(例如,布局)中相似的代码示例,请查看相关组件(例如格式化的文本字段和spinners)的示例列表。
Example | Where Described | Notes |
---|---|---|
TextDemo | This section | 使用基本文本字段和动作侦听器的应用程序。 |
TextFieldDemo | This section | 使用文本字段和文本区域的应用程序。在文本区域中进行搜索以从文本字段中找到一个条目。 |
DialogDemo | 如何制作对话框 | CustomDialog.java 包含一个文本字段,其值已选中。您可以通过单击“更多对话框”选项卡,选择“Importing 验证对话框”选项,然后单击“显示”来调出该对话框!按钮。 |
TextSamplerDemo | 使用 Literals 组件 | 使用GridBagLayout 和一种便捷方法布置标签文本字段对: |
addLabelTextRows(JLabel[] labels, JTextField[] textFields, GridBagLayout gridbag, Container container) |
||
TextInputDemo | 如何使用格式化的文本字段 | 使用SpringLayout 和SpringUtilities 便捷方法布置标签文本字段对:makeCompactGrid(Container parent, 整数行,整数列, int initialX,int initialY, int xPad,int yPad) |
如果您使用 JavaFX 编程,请参见Text Field。