前言
在看了书上的案例,都选择继承JFrame,实现Listener接口,主要步骤如下:
- 继承JFrame,实现接口,ActionListener、KeyListener…
- 定义组件
- 构造方法,窗体基本设置,实例化组件,添加监听
- 事件处理
下面用一个登录页面来做详解
账号为abc,密码为1234时登录成功
1.继承JFrame,实现Listener接口
类似于如下的定义,继承了JFrame,实现ActionListener接口
public class Work1 extends JFrame implements ActionListener {}
2.定义组件
看书上案例,一般来说,定义好类就开始定义需要的组件了,例如下例
public class Book2 extends JFrame implements ActionListener{
// 实现这个登录界面,需要两个按钮,一个登录,一个退出
private JButton b_ok,b_exit;
// 登录成功的时候输出的文本框
private JLabel t_la;
// 输入用户名的文本框
private JTextField userName;
// 输入密码的密码框
private JPasswordField password;
3.构造方法内,窗体基本设置,实例化组件,添加监听
在定义好需要的组件后,就开始添加内容了
下面的操作都是在该类的构造方法里面进行
public Book2() {
xxxx
}
- 首先是设置窗体的基本信息
// 利用继承的JFrame定义窗体名
super("登入界面");
// 设置窗体大小
setSize(500,100);
// 这个的意思是设置窗口相对于指定组件的位置,当值为null时出现在屏幕正中间
setLocationRelativeTo(null);
// 用户单击窗口的关闭按钮时能直接关闭程序
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 定义窗口的浮动
setLayout(new FlowLayout());
- 然后就是对之前定义的组件实例化出来,并为那些组件进行基础的信息设定
// 5表示文本框长度
userName = new JTextField(5);
password = new JPasswordField(5);
b_ok = new JButton("确定");
b_exit = new JButton("退出");
// 登录判断的返回信息,先设置为空
t_la = new JLabel(" ");
- 实例化好以后,就全部加进窗口里面,使用这个add函数
add(new JLabel("账号:"));
add(userName);
add(new JLabel("密码:"));
add(password);
add(b_ok);
add(b_exit);
add(t_la);
- 在add进窗口后,记得加上这个,让他显现出来
setVisible(true);
- 如果有需要进行逻辑操作的组件,例如这个按钮,就需要为其添加监听,需要什么监听就加什么监听,例如这里是鼠标点击监听,就是
addActionListener()
,其他的就addxxxListener()
b_exit.addActionListener(this);
b_ok.addActionListener(this);
事件处理
在添加了监听后,捕捉到动作后就会进行相关的事件处理,这里我们通过实现相关接口的方法,例如这里我们implements ActionListener
,那么就要实现他的actionPerformed
public void actionPerformed(ActionEvent e) {
xxx
}
这里就可以把我们所需要的逻辑添加进去了
public void actionPerformed(ActionEvent e) {
if(e.getSource() == b_exit)
System.exit(0);
if(e.getActionCommand().equals("确定")) {
String KeyText =String.valueOf(password.getPassword());//获取密码框文本
if(userName.getText().equals("abc") && KeyText.equals("1234"))
t_la.setText("欢迎您,abc!");
else
t_la.setText("账号或密码错误!");
setVisible(true);
}
}
这里有两个函数getSource
和getActionCommand
,分别是获得事件源和获得事件源绑定的文字
完成
至此所有的操作就已经完成了,完整代码如下:
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/*例4.2*/
public class Book2 extends JFrame implements ActionListener{
// 实现这个登录界面,需要两个按钮,一个登录,一个退出
private JButton b_ok,b_exit;
// 登录成功的时候输出的文本框
private JLabel t_la;
// 输入用户名的文本框
private JTextField userName;
// 输入密码的密码框
private JPasswordField password;
public Book2() {
super("登入界面");
setSize(500,100);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
userName = new JTextField(5);
password = new JPasswordField(5);
b_ok = new JButton("确定");
b_exit = new JButton("退出");
t_la = new JLabel(" ");
add(new JLabel("账号:"));
add(userName);
add(new JLabel("密码:"));
add(password);
add(b_ok);
add(b_exit);
add(t_la);
setVisible(true);
b_exit.addActionListener(this);
b_ok.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == b_exit)
System.exit(0);
if(e.getActionCommand().equals("确定")) {
String KeyText =String.valueOf(password.getPassword());//获取密码框文本
if(userName.getText().equals("abc") && KeyText.equals("1234"))
t_la.setText("欢迎您,abc!");
else
t_la.setText("账号或密码错误!");
setVisible(true);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new Book2();
}
}