密码框(JPasswordField)与文本框的定义与用法基本相同,唯一不同的是密码框使用户输入的字符串以某种符号进行加密。密码框对象时通过javax.swing.JPasswordField类来创建的,JPasswordField类的构造方法与JTextField的构造方法非常类似。 例子
import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*;
public class Test extends JFrame { /* 定义组件 */
private JPasswordField jp1; private JButton an1; private JPanel mb1,mb2;
public static void main(String[] args) { Test T = new Test(); // 创建本类对象 T.setVisible(true); // 设置显示窗体 }
public Test() {
Container c = this.getContentPane(); /* 设置窗体布局管理器 */
c.setLayout(new GridLayout(2,1)); /* 创建组件 */
jp1=new JPasswordField(10); an1=new JButton(\确定\);
mb1=new JPanel(); mb2=new JPanel(); /* 设置组件属性 */
jp1.setToolTipText(\请输入6到15位由字母、数据、下划线组成的密码!\); //设置提示文本
jp1.setEchoChar('*'); //设置回显字符为* /* 为组件添加事件 */
jp1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
an1.requestFocusInWindow(); //按钮请求焦点 } });
an1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(new
String(jp1.getPassword(),0,jp1.getPassword().length)); } });
/* 添加组件 */ mb1.add(jp1); mb2.add(an1);
c.add(mb1); c.add(mb2);
/* 设置窗体属性 */
this.setTitle(\下拉列表\); this.setSize(250, 130); Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width - this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2); this.setResizable(false);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
运行结果如下:
确定后的结果:
注:在JPasswordField类中提供一个setEchoChar()方法,可以改变密码框的回显字符。 ? 文本域组件JTextArea
Swing中任何一个文本域都是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()方法,该方法用于设置文本域是否可以自动换行,如果将该方法的参数设置为true,文本域将自动换行,相反则不自动换行。 例子
import java.awt.*;
import java.awt.event.*; import java.io.*;
import javax.swing.*;
public class Test extends JFrame { /* 定义组件 */
private JTextArea ta1; private JScrollPane sp1;
public static void main(String[] args) throws Exception { Test T = new Test(); // 创建本类对象 T.setVisible(true); // 设置显示窗体 }
public Test() throws Exception {
Container c = this.getContentPane(); /* 设置窗体布局管理器 */ /* 创建组件 */
ta1=new JTextArea();
sp1=new JScrollPane(ta1); /*设置流*/ File file=new
File(\); FileReader in=new FileReader(file);
BufferedReader buin=new BufferedReader(in); String str=null;
while((str=buin.readLine())!=null){ ta1.append(str); ta1.append(\); }
buin.close(); in.close();
/* 设置组件属性 */
ta1.setLineWrap(true); //设置自动换行 ta1.setEnabled(false); //设置禁用文本
ta1.setDisabledTextColor(Color.red); //设置禁用文本的当前颜色
/* 为组件添加事件 */ /* 添加组件 */ c.add(sp1);
/* 设置窗体属性 */
this.setTitle(\文本域\); this.setSize(250, 130); Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width - this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2); this.setResizable(false);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } }
运行结果如下:
注:如插入this.setUndecorated(true);显示效果如下
十一、常用事件监听器
Swing中常用的两个事件监听器,即动作事件监听器与焦点事件监听器。 ? 监听事件简介
在Swing事件模型中由3个分离的对象完成对事件的处理,分别为事件源、事件以及监听程序。事件源触发一个事件,它被一个或多个“监听器”接收,监听器负责处理事件。
所谓事件监听器,实质上就是一个“实现特定类型监听器接口”的类对象。也许有些读者对此有些迷惑,下面就来解释一下。事件几乎都以对象来表示,它是某种事件类的对象,事件源(如按钮)会在用户作出相应的动作(如按钮被按下)时产生事件对象,如动作事件对应ActionEvent类对象,同时要编写一个监听器的类必须实现相应的接口,如ActionEvent类对应的是ActionListener,需要获取某个事件对象就必须实现相应的接口,同时需要将接口中的方法一一实现。最后事件源(按钮)调用相应的方法加载这个“实现特定类型监听器接口”的类对象,所有的事件源都具有addXXXListener()和removeXXXListener()方法(其中“XXX”方法表示监听事件类型),这样就可以为组件添加或移除相应的事件监听器。
? 动作事件监听器
动作事件(ActionEvent)监听器是Swing中比常用的事件监听器,很多组件的动作都会使用它监听,如按钮被按下。表13.3描述了动作事件监听器的接口与事件源。
表13.3动作事件监听器 事 件 名 称 ActionEvent 例子
事 件 源 JButton、JList、JTextField等 监 听 接 口 ActionListener 添加或删除相应类型监听器的方法 addActionListener()、removeActionListener() import java.awt.*; import javax.swing.*; import java.awt.event.*;
public class Test extends JFrame { /*定义组件 */
private JButton an1;
public static void main(String[] args) throws Exception { Test T = new Test(); // 创建本类对象 T.setVisible(true); // 设置显示窗体 }
public Test() throws Exception {
Container c = this.getContentPane(); /* 设置窗体布局管理器 */ c.setLayout(null); /* 创建组件 */
an1=new JButton(); /*设置流*/
/* 设置组件属性 */
an1.setBounds(10,10,100,40); an1.setText(\按钮\); /* 为组件添加事件 */
an1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { an1.setText(\我被单击了\); }