1.事件监听机制
1.事件: 事件当我们写好一个界面后,我们免不了会对这个界面进行一些操作,就像我们平时使用时一样,在输入框中输入数据,点击按钮等等,这些操作我们称之为一个事件。
2.事件监听器: 在java中我们要确定一个按钮有没有被点击,就要给按钮这个组件添加一个类似监听器的东西,监视一个按钮有没有被点击。这个东西我们叫做事件监听器。
而监听这个按钮有没有被点击的这种机制就是事件监听机制。
***java中每个事件都对应一个事件监听器。它被定义在 java.awt.event 这个包中。
2.给组件添加监听器
事件监听器的定义都是接口,而接口其实就是一个类,但这个类中所有方法都没有方法体,即不知道这个方法是干啥的。而同时定义这样的一个类要用到“interface”这个词,而不是“class”。因为接口中的方法都是抽象方法,所以接口是没有构造方法,不能够创建对象。我们定义一个接口的作用是给子类来做扩展,在子类中重写方法,构造方法的。
定义
public interface 类名{
public
}
接口的继承用implements,与类中继承用extends有所不同
public class 子类 implements 接口{
/*重写方法,***而且必须重写(实现)接口定义中所有的方法,
且接口中方法默认都是public,所有即使接口中没有写出public,
实现的时候也要加上public。(子类在继承父类方法的时候,不
能减小方法的可访问范围,父类中时public,子类中就必须是
public)*/
}
定义一个类实现对应的接口
因为我们已经知道事件监听器的定义都是接口,所以我们要定义一个类实现对应的接口。如果我们要监听一个按钮是否被点击,此时我们可以重新创建一个class:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//重写接口中的方法,当事件发生时,这个方法被自动调用
JFrame jfr= new JFrame();
jfr.setTitle("登录");
jfr.setSize(100, 150);
JLabel label= new JLabel("登录成功");
jfr.add(label);
jfr.setLocationRelativeTo(null);
jfr.setDefaultCloseOperation(3);
jfr.setVisible(true);/*此处我们写个一个界面,所以当我们
点击登录按钮会弹出这个界面*/
}
}
这样就实现了按钮的监听器,接下来就是将这个监听器加给登录界面中的按钮监听器,在界面那段代码后面加上如下两行代码:
运行这两个class文件,点击登陆按钮我们就会得到如图的结果:
最后分享实现输入特定账号密码后点击登陆弹出“登录成功”或“登录失败”的代码:
//1.JFrameTest类,界面测试类
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
//定义一个界面类
public class JFrameTest {
public static void main(String[] args) {
JFrameTest jft = new JFrameTest();// 由这个界面类创建界面对象
jft.Showframe();// 调用这个类里面写的方法
}
public void Showframe() { // 显示一个窗体的方法
JFrame frame = new JFrame(); // 构造一个窗体
frame.setTitle("界面"); // 给界面设置标题
frame.setSize(300, 350); // 给界面设置大小(宽,高)
frame.setLocationRelativeTo(null); // 设置窗体居中显示(可以自己选择是否添加)
frame.setDefaultCloseOperation(3); // 设置退出进程,也即点击右上角关闭能退出
// 给窗体设置流式布局,在后面给窗体添加组件会用到布局
FlowLayout layout = new FlowLayout();
frame.setLayout(layout);
// 给窗体添加组件
// 为窗体加上图片
ImageIcon icon = new ImageIcon("C:\\Users\\lkold\\Desktop\\qq.jpg");
// 创建图片对象 文件路径自行更改
JLabel iconLabel = new JLabel();// 创建显示图片的标签,图片要放入标签里面
iconLabel.setIcon(icon);// 设置标签显示的图片
frame.add(iconLabel);// 添加到窗体上
JLabel labelName = new JLabel("账号:");// 创建一个标签
frame.add(labelName);// 添加到窗体上
JTextField textName = new JTextField();
textName.setPreferredSize(new Dimension(220, 30));
frame.add(textName);
JLabel labelName1 = new JLabel("密码:");
frame.add(labelName1);
JPasswordField password = new JPasswordField();
password.setPreferredSize(new Dimension(220, 30));
frame.add(password);
JButton Login1 = new JButton("注册");
frame.add(Login1);
JButton Login2 = new JButton("登录");
frame.add(Login2);
// 设置窗体可见,这步放在最后,很重要,如果没加,运行程序窗体是不会显示出来的
frame.setVisible(true);
ButtonListener bulis = new ButtonListener();// 创建监听对象
Login2.addActionListener(bulis); // 将监听器加给登录按钮
bulis.jft = frame;// /将界面信息传给监视器
bulis.textName1 = textName;// 将账号和密码传给监听器
bulis.password1 = password;
}
}
//2.ButtonListener类,监听按钮类
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class ButtonListener implements ActionListener {
public JFrame jft;// 定义一个界面类型,接受传过来的界面
public JTextField textName1;
public JPasswordField password1;// 定义一个数据类型,接受传过来的账号和密码
public void actionPerformed(ActionEvent e) {
// 重写接口中的方法,当事件发生时,这个方法被自动调用
String word=textName1.getText();
String word2=new String(password1.getPassword());
//判断传过来的数据是否符合要求,响应登录成功和登录失败
if(word.equals("java666")&&word2.equals("666666")){
JFrame jfr = new JFrame();
jfr.setTitle("登录");
FlowLayout layout = new FlowLayout();
jfr.setLayout(layout);
jfr.setSize(100, 150);
JLabel label = new JLabel("登录成功");
jfr.add(label);
jfr.setLocationRelativeTo(null);
jfr.setDefaultCloseOperation(2);
jfr.setVisible(true);/*
* 此处我们写个一个界面,所以当我们 点击登录按钮会弹出这个界面
*/
jft.dispose();//关闭登录界面,只显示响应的登录成功界面
}
else{
JFrame jfr = new JFrame();
jfr.setTitle("登录");
FlowLayout layout = new FlowLayout();
jfr.setLayout(layout);
jfr.setSize(100, 150);
JLabel label = new JLabel("登录失败");
jfr.add(label);
jfr.setLocationRelativeTo(null);
jfr.setDefaultCloseOperation(2);
jfr.setVisible(true);
jft.dispose();
}
}
}
代码运行结果,输入正确的账号密码:
输入错误的账号密码: