- 监听器使按钮响应,通过调用按钮对象这个方法加上监听器
- 动作监听器 ActionListener 属于系统的一个接口类
- 监听时,需要自己写个类实现接口类,用implements 实现a
- 实现接口后,必须重写actionPerformed方法,事件发生时调用
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
//输入
public class LoginListen implements ActionListener{
// 实现监听器接口类
public void actionPerformed(ActionEvent e){
//重写方法,点击时会调用方法
// 加入自己的代码
}
}
- 绑定按钮操作
LoginListen listen = new LoginListen (); // 创建新的对象 btn.addActionListener (listen); //按钮添加监听器,括号里是对象名代码实现
目标:
- 创建一个登陆与注册界面,点击登陆按钮,输出账号密码内容
- 当输入正确的账号密码后,点击登录,按钮响应,弹出“登陆成功”界面
- 当输入错的信息后,点击登陆,自动清空账号密码
- 当点击注册按钮时,弹出注册界面
实例:
第一部分:登陆界面
- LoginUI.java
import javax.swing.JFrame;// 窗体
import javax.swing.JLabel;// 标签
import javax.swing.JTextField;// 文本输入框
import javax.swing.JPasswordField;//密码输入框
import javax.swing.JButton;// 按钮
import javax.swing.ImageIcon;// 图片/图标
import java.awt.Dimension;// 尺寸
import java.awt.FlowLayout;// 流式布局
public class LoginUI{
public void showUI(){
// 写创建窗体的所有代码
// 1: 创建一个窗体对象
JFrame jf = new JFrame ();
// 2: 使用窗体对象名调用方法设置 标题、尺寸、关闭操作选项、可视化 、布局
jf.setTitle ("登录界面");
jf.setSize (500,700);// 单位: 像素点
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
jf.setVisible (true);// 显示到屏幕
// 创建流式布局对象
FlowLayout flow = new FlowLayout ();
jf.setLayout (flow);
// 3: 创建组件对象 标签 按钮 输入框 密码输入框
JLabel nameJla = new JLabel ();
JLabel pwdJla = new JLabel ();
JLabel imgJla = new JLabel ();
JButton btn = new JButton ();
JButton btnrst = new JButton ("注册");
JTextField nameIn = new JTextField ();
JPasswordField pwdIn = new JPasswordField ();
// 4: 使用组件对象名 设置组件需要的属性 文本 尺寸 颜色 ...
nameJla.setText ("账号:");
pwdJla.setText ("密码:");
// 图片 ()中写一个图片的文件地址
ImageIcon icon = new ImageIcon ("C:\Users\ZLYLF\Desktop\testtiger.png");
imgJla.setIcon (icon);
btn.setText ("登录");
// 尺寸
Dimension imgSize = new Dimension (500,500);
imgJla.setPreferredSize (imgSize);
Dimension inputSize = new Dimension (410,35);
nameIn.setPreferredSize (inputSize);
pwdIn.setPreferredSize (inputSize);
// 5: 使用窗体对象名添加组件对象名
// 按照流式布局的规则 按顺序添加组件
jf.add (imgJla);
jf.add (nameJla);
jf.add (nameIn);
jf.add (pwdJla);
jf.add (pwdIn);
jf.add (btn);
jf.add (btnrst);
jf.setVisible (true);
// 替换为具体的类 - 这个类的要求是 必须实现这个ActionListener接口
LoginListen listen = new LoginListen ();
// 按钮绑定监听器
btn.addActionListener (listen);
btnrst.addActionListener (listen);
String str = ("qwb");
listen.str=str;
// 将输入框对象的对象地址 复制一份给监听器中的输入框对象名
listen.nameIn=nameIn;
listen.pwdIn = pwdIn;
System.out.println (listen.str);
}
public static void main(String[] args){
LoginUI loginui = new LoginUI ();
loginui.showUI ();
}
}
- 在第一部分,创建登陆界面后,给按钮添加后者监听器
- 输入框内容,在监听器部分需要校验,所以要将注册界面的输入框对象地址复制给监听器的输入框对象,进而将界面内容与监听器联系起来
第二部分:监听器
LoginListen.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class LoginListen implements ActionListener{
String str;
// 创建两个输入框对象名 不初始化 用listen对象来调用初始化
JTextField nameIn;
JPasswordField pwdIn;
// 当实现了监听器接口的类 创建的对象绑定给按钮之后,这个按钮点击时就会调用下面这个方法
// 必须要重写接口中的没有方法体的方法 需要将分号改为{}
public void actionPerformed(ActionEvent e){
// 再加入自己的代码
System.out.println ("按钮被点击了");
// 获取按钮上的字符串
String actionStr = e.getActionCommand ();
if(actionStr.equals ("登录")){
// 获取输入框中的字符串
String userName = nameIn.getText ();
String userPwd = pwdIn. getText();
System.out.println ("账号:" + userName + "n密码:" + userPwd);
if(userName.equals ("admin") && userPwd.equals ("admin123")){
System.out.println ("登录成功!!");
JFrame jf = new JFrame ();
jf.setTitle (userName + "登录成功!!");
jf.setVisible (true);
jf.setLocationRelativeTo (null);
jf.setSize (500, 150);
} else{
System.out.println ("登录失败,请重试!");
nameIn.setText ("");
pwdIn.setText ("");
}
}else if(actionStr.equals ("注册")){
// 调用注册界面
JFrame jf1 = new JFrame ();
jf1.setTitle ("注册界面");
jf1.setSize(500,1000);
jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf1.setVisible(true);
FlowLayout flow = new FlowLayout ();
jf1.setLayout (flow);
JLabel nameJla = new JLabel ();
JLabel pwdJla = new JLabel ();
JLabel pnbJla = new JLabel();
JLabel vcdJla = new JLabel();
JLabel imgJla = new JLabel ();
JButton btn1 = new JButton ();
JButton btn2 = new JButton ();
JTextField nameIn = new JTextField ();
JPasswordField pwdIn = new JPasswordField ();
JTextField pnbIn = new JTextField ();
JTextField vcdIn = new JTextField ();
nameJla.setText ("账号:");
pwdJla.setText ("密码:");
pnbJla.setText("手机号:");
vcdJla.setText("验证码:");
ImageIcon icon = new ImageIcon ("C:\Users\Administrator\Pictures\Camera Roll\以太灰.JPG");
imgJla.setIcon (icon);
btn1.setText ("获取验证码");
btn2.setText("注册");
Dimension imgSize = new Dimension (500,500);
imgJla.setPreferredSize (imgSize);
Dimension inputSize = new Dimension (410,35);
nameIn.setPreferredSize (inputSize);
pwdIn.setPreferredSize (inputSize);
pnbIn.setPreferredSize (inputSize);
vcdIn.setPreferredSize (inputSize);
jf1.add (imgJla);
jf1.add (nameJla);
jf1.add (nameIn);
jf1.add (pwdJla);
jf1.add (pwdIn);
jf1.add (pnbJla);
jf1.add (pnbIn);
jf1.add (vcdJla);
jf1.add (vcdIn);
jf1.add (btn1);
jf1.add (btn2);
jf1.setVisible(true);
jf1.setLocationRelativeTo (null);
}
}
}
- 监听器部分的操作代码需要写在,重写actionPerformed方法内部。
- public void actionPerformed(ActionEvent e){ 写操作代码 }
- 点击按钮后,重写方法将会被调用。



