文本组件

文本组件在开发 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所示。

image 2024 03 05 23 05 10 690
Figure 1. 图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所示。

image 2024 03 05 23 17 45 541

编程训练(答案位置:资源包\TM\sl\18\编程训练)

【训练13】仿QQ登录窗口 仿照QQ登录窗口创建一个输入用户名和密码的小窗体,当用户输入的用户名为mr,密码为mrsoft时,单击“登录”按钮会弹出登录成功对话框。

【训练14】清除按钮 创建一个小窗体,在小窗体中显示一个文本框和一个按钮,当用户单击按钮后,文本框内的所有内容都会被清空。