文本组件在实际项目开发中使用最广泛,尤其是文本框与密码框组件,通过文本组件可以很轻松地处理单行文字、多行文字、口令字段等,下面将对文本组件的定义以及使用进行讲解。
JTextField文本框组件
文本框(JTextField)用来显示或编辑一个单行文件,在Swing中通过javax.swing.JTextField类对象创建,该类继承了javax.swing.text.JTextComponent类,下面例举了一些创建文本框常用的构造方法;
- public JTextField():构造一个没有任何初始值的文本框;
- public JTextField(String text):构造一个用指定文本(text)初始化的文本框;
- public JTextField(int fieldwidth):构造一个具有指定列数(fieldwidth)的文本框;
- public JTextField(String text,int fieldwidth):构造一个用指定文本(text)和列(fieldwidth)初始化的文本框;
- public JTextField(Document docModel,String text,int fieldwidth):构造一个用给定文本(text)、存储模型(docModel)和给定的列数(fieldwidth)的文本框;
从上述构造方法可以看出,定义JTextField组件很简单,可以通过在初始化文本框时设置文本框的默认文字、文本框的长度等方式在实现。
下面看一个清除文本框中的文本内容,代码如下:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Demo extends JFrame {
public Demo() {
Container c = getContentPane(); // 获取窗体容器
c.setLayout(new FlowLayout());
JTextField jt = new JTextField("aaa"); // 设定文本框初始值
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 Demo();
}
}
返回结果:
本实例的窗体中主要设置一个文本框和一个按钮,然后分别为文本框和按钮设置事件,当用户将光标焦点落于文本框中并按下<Enter>建时,文本框将执行actionPerformed()方法中的相关操作,同时为按钮添加相应的事件,当用户单击清除按钮时,文本框中的字符串将被清除
JPassword密码框事件
密码框(JPasswordField)与文本框的定义与用法基本相同,唯一不同的是密码框将用户输入的字符串以某种符号进行加密。密码框对象时通过javax.swing.JPasswordField类来创建,JPasswordField类构造方法与JTextField类的构造方法非常相似,可以参考上面的JTextField类的构造方法。
在JPasswordField类中提供一个setEchoChar()方法,可以改变密码框的回显示字符,语法如下:
JPasswordField jp = new JPasswordField();
//设置回显字符
jp.setEchoChar('#');
想要获取JPasswordField中输入的值,可以使用如下方法:
JPasswordField jp = new JPasswordField();
//获取密码字符数组
char ch[] = jp.getPassword();
//将字符数组转为为字符串
String pwd = new String(ch);
下面讲解JPasswordField组件用法,代码如下:
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Demo extends JFrame {
public Demo() {
//创建容器
Container ct = getContentPane();
//使用流布局管理器
ct.setLayout(new FlowLayout());
//创建JPasswordField对象
JPasswordField jp = new JPasswordField();
//设置回显字符
jp.setEchoChar('#');
//密码的长度
jp.setColumns(10);
//设置事件器
jp.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//获取密码字符数组
char ch[] = jp.getPassword();
//将字符数组转为为字符串
String pwd = new String(ch);
System.out.println(pwd);
}
});
//将组件加入容器
ct.add(jp);
setBounds(200, 200, 200, 100);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Demo();
}
}
返回结果:
JTextArea文本域组件
JTextArea表示文本域组件,它可以在程序中接受用户输入的多行文字,Swing中任何一个文本区域都是JTextArea类型的对象,JTextArea常用的构造方法如下:
- public JTextArea():构造JTextArea类的对象;
- public JTextArea(String text):构造显示指定文本(text)的JTextArea类的对象;
- public JTextArea(int rows,int columns):构造具有指定行数(rows)和列数(columns)的空JTextArea类的对象;
- public JTextArea(Document doc):构造JTextArea对象,使其具有给定的文档模型(doc),所有其他参数均默认为(null,0,0);
- public JTextArea(Document doc,String text,int rows,int columns):构造具有指定行数(rows)和列数(columns)以及给定模型(doc)的JTextArea类的对象;
JTextArea类中存在一个setLineWarp(Boolean wrap)方法,该方法用于设置文本域是否可以自动换行,如果该方法的参数设置为true,文本域将自动换行,否则不自动换行。
JTextArea类中还有一个常用的append(String str)方法,该方法用来为文本域添加文本(str)
下面通过一个实例来演示JTextArea文本域组件的使用,代码如下:
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
public class Demo extends JFrame{
public Demo(){
setSize(200,100);
setTitle("定义自动换行的文本域");
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
Container cp=getContentPane(); // 获取窗体容器
JTextArea jt=new JTextArea("文本域",6,6); // 创建6行6列默认值为“文本域”的文本域组件
jt.setLineWrap(true); //可以自动换行
cp.add(jt);
setVisible(true);
}
public static void main(String[] args) {
new Demo();
}
}
返回结果: