文本组件
文本组件在开发 Swing 程序过程中经常被用到,尤其是文本框组件和密码框组件。使用文本组件可以很轻松地操作单行文字、多行文字、口令字段等文本内容。
JTextField文本框
文本框组件由 JTextField 对象表示。JTextField 类的常用构造方法如下。
-
public JTextField():创建一个文本未被指定的文本框。
-
public JTextField(String text):创建一个指定文本的文本框。
-
public JTextField(int fieldwidth):创建一个指定列宽的文本框。
-
public JTextField(String text, int fieldwidth):创建一个指定文本和列宽的文本框。
-
public JTextField(Document docModel, String text, int fieldWidth):创建一个指定文本模型、文本内容和列宽的文本框。
如果要为一个文本未被指定的文本框设置文本内容,则需要使用 setText() 方法。setText() 方法的语法如下:
public void setText(String t);
其中,t 表示文本框要显示的文本内容。
【例18.20】在文本框中显示默认文字并清除它们(实例位置:资源包\TM\sl\18\20)
创建 JTextFieldTest 类,并继承 JFrame 类,在窗体中创建一个指定文本的文本框,当单击 “清除” 按钮时,文本框中的文本内容将被清除。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextFieldTest extends JFrame {
public JTextFieldTest() {
Container c = getContentPane(); // 获取窗体主容器
c.setLayout(new FlowLayout());
JTextField jt = new JTextField("请点击清除按钮"); // 设定文本框初始值
jt.setColumns(20); // 设置文本框长度
jt.setFont(new Font("宋体", Font.PLAIN, 20)); // 设置字体
JButton jb = new JButton("清除");
jt.addActionListener(new ActionListener() { // 为文本框添加回车事件
public void actionPerformed(ActionEvent arg0) {
jt.setText("触发事件"); // 设置文本框中的值
}
});
jb.addActionListener(new ActionListener() { // 为按钮添加事件
public void actionPerformed(ActionEvent arg0) {
System.out.println(jt.getText()); // 输出当前文本框的值
jt.setText(""); // 将文本框置空
jt.requestFocus(); // 焦点回到文本框
}
});
c.add(jt); // 窗体容器添加文本框
c.add(jb); // 窗体添加按钮
setBounds(100, 100, 250, 110);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JTextFieldTest();
}
}
运行结果如图18.25所示。

JPasswordField密码框
密码框组件由 JPasswordField 对象表示,其作用是把用户输入的字符串以某种符号进行加密。JPasswordField 类的常用构造方法如下。
-
public JPasswordField():创建一个文本未被指定的密码框。
-
public JPasswordFiled(String text):创建一个指定文本的密码框。
-
public JPasswordField(int fieldwidth):创建一个指定列宽的密码框
-
public JPasswordField(String text, int fieldwidth):创建一个指定文本和列宽的密码框。
-
public JPasswordField(Document docModel, String text, int fieldWidth):创建一个指定文本模型和列宽的密码框。
JPasswordField 类提供了 setEchoChar() 方法,这个方法用于改变密码框的回显字符。setEchoChar() 方法的语法如下:
public void setEchoChar(char c)
其中,c 表示密码框要显示的回显字符。
例如,创建 JPasswordField 对象,并设置密码框的回显字符为 “#”。关键代码如下:
JPasswordField jp = new JPasswordField();
jp.setEchoChar('#'); // 设置回显字符
那么,如何获取 JPasswordField 对象中的字符呢?关键代码如下:
JPasswordField passwordField = new JPasswordField(); // 密码框对象
char ch[] = passwordField.getPassword(); // 获取密码字符数组
String pwd = new String(ch); // 将字符数组转换为字符串
JTextArea文本域
文本域组件由 JTextArea 对象表示,其作用是接收用户的多行文本输入。JTextArea 类的常用构造方法如下。
-
public JTextArea():创建一个文本未被指定的文本域。
-
public JTextArea(String text):创建一个指定文本的文本域。
-
public JTextArea(int rows,int columns):创建一个指定行高和列宽,但文本未被指定的文本域。
-
public JTextArea(Document doc):创建一个指定文档模型的文本域。
-
public JTextArea(Document doc,String Text,int rows,int columns):创建一个指定文档模型、文本内容以及行高和列宽的文本域。
JTextArea 类提供了一个 setLineWrap(boolean wrap) 方法,这个方法用于设置文本域中的文本内容是否可以自动换行。如果参数 wrap 的值为 true,那么文本域中的文本内容会自动换行;否则不会自动换行。
此外,JTextArea 类还提供了一个 append(String str) 方法,这个方法用于向文本域中添加文本内容。
【例18.21】在文本域中显示默认文字(实例位置:资源包\TM\sl\18\21)
创建 JTextAreaTest 类,并继承 JFrame 类,在窗体中创建文本域对象,设置文本域自动换行,向文本域中添加文本内容。
import java.awt.*;
import javax.swing.*;
public class JTextAreaTest extends JFrame {
public JTextAreaTest() {
setSize(200, 100);
setTitle("定义自动换行的文本域");
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
Container cp = getContentPane(); // 获取窗体主容器
// 创建一个文本内容为“文本域”、行高和列宽均为6的文本域
JTextArea jt = new JTextArea("文本域", 6, 6);
jt.setLineWrap(true); // 可以自动换行
cp.add(jt);
setVisible(true);
}
public static void main(String[] args) {
new JTextAreaTest();
}
}
运行结果如图18.26所示。

编程训练(答案位置:资源包\TM\sl\18\编程训练)
【训练13】仿QQ登录窗口 仿照QQ登录窗口创建一个输入用户名和密码的小窗体,当用户输入的用户名为mr,密码为mrsoft时,单击“登录”按钮会弹出登录成功对话框。
【训练14】清除按钮 创建一个小窗体,在小窗体中显示一个文本框和一个按钮,当用户单击按钮后,文本框内的所有内容都会被清空。