事件监听器的添加(登陆界面的完善)

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();
		}
	}
}

代码运行结果,输入正确的账号密码:
1
在这里插入图片描述
输入错误的账号密码:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44307764/article/details/86585297