事件机制

事件机制

在事件机制中就需要使用接口或者抽象类。

 

对象分为三种:

事件:发出的事件本身,在事件源和事件监听器之间传递信息的对象实体

事件源:发出事件者,事件发生的地方,由于事件源的某项属性或状态发生了改变(比如BUTTON被单击)导致某项事件发生。换句话说就是生成了相应的事件对象。因为事件监听器要注册在事件源上,所以事件源类中应该要有盛装监听器的容器(List,Set等等)。所有的图形界面组件都可以成为事件源对象;

③事件监听器:监听事件,当事件源的属性或状态改变时,进行事件处理或转发的对象

④事件处理器:接受事件对象并进行相应处理。

 

事件接口:

ActionListener:事件监听器  

MouseListener:鼠标监听器  

MouseMotionListener:鼠标移动监听  

MouseWheelListener:鼠标滚轮监听器  

事件接口中的方法特点:自动触发,只要当前事件被触发了后,事件类中的相应方法会自动执行

注意:实现监听器必须把监听器中的所有抽象方法都实现(重写),不然类名会报错

 

常用的事件监听器方法:

addActionListener(ActionListener al); 用来捕获按钮上的鼠标点击或者输入框的回车动作。

addMouseListener(MouseListener ml); 用来捕获事件源上鼠标在事件源按下,鼠标在事件源释放,鼠标在事件源单击,鼠标进入事件源,鼠标推出事件源

addMouseMotionListener(MouseMotionListener mml); 用来捕获鼠标在事件源上的移动和按下按键移动的监听器方法。

addKeyListener(KeyListener kl); 用来在事件源上捕获键盘按键的动作。

 

 下面为一个登录界面的实例:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*; 
public class LoginListener implements ActionListener {
	private JTextField txtName;//定义一个JTextField类属性的变量名 txtName
	public LoginListener(JTextField txtName){
		this.txtName = txtName;
	}
	public void actionPerformed(ActionEvent e) {
		System.out.print("你点击了"+e.getActionCommand()+"按钮");
		String name=txtName.getText();//获取输入框中的值
		//判断name中的值与“123”是否匹配
		if (name.equals("123")){
			//实现一个新窗体
			JFrame jf = new JFrame("简单画板");
			jf.setSize(200, 200);
			jf.setDefaultCloseOperation(2);
			JLabel JL=new JLabel("                    登录成功");
			jf.add(JL);
			jf.setVisible(true);
	}
		else{
			//显示一个消息提示框
			JOptionPane.showMessageDialog(null, "你输入的账号或密码错误,请重新输入!");
		}
		
	}

}

 

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*; 

public class RegisterListener implements ActionListener{

	public void actionPerformed(ActionEvent e) {
		JFrame J = new JFrame();//实例化一个窗体对象
		J.setTitle("注册页面");//设置窗体标题
		J.setSize(190, 200);//设置窗体大小
		J.setLocation(500,300);//设置窗体位置
		J.setDefaultCloseOperation(3);//设置窗体关闭属性
		FlowLayout fl = new FlowLayout();//实例化一个流式布局类对象
		J.setLayout(fl);//设置窗体的布局方式为流式布局
		JButton JB1 = new JButton("完成");//实例化一个按钮对象
		JLabel JL1=new JLabel("用户名");//实例化一个标签对象
		JLabel JL2=new JLabel("密码");
		JLabel JL3=new JLabel("确认密码");
		JLabel JL4=new JLabel("邮箱");
		JLabel JL5=new JLabel("输入验证码");
		JTextField JT1=new JTextField(10);//实例化一个文本对象
		JTextField JT2=new JTextField(10);
		JTextField JT3=new JTextField(4);
		JPasswordField JP1=new JPasswordField(10);//实例化一个密码文本对象
		JPasswordField JP2=new JPasswordField(10);
		//将对象添加到窗体上
		J.add(JL1);
		J.add(JT1);
		J.add(JL2);
		J.add(JP1);
		J.add(JL3);
		J.add(JP2);
		J.add(JL4);
		J.add(JT2);
		J.add(JL5);
		J.add(JT3);
		J.add(JB1);
		J.setResizable(false);//设置是否可以自由改变大小
		J.setVisible(true);//设置窗体是否可见
	}
}

 

import java.awt.FlowLayout;  
import javax.swing.*; 

public class Frame{
	public static void main(String[] args){
		JFrame JF=new JFrame();//设置一个窗体对象
		 JF.setDefaultCloseOperation(3);//设置窗体的关闭属性
		 JF.setSize(180,200);//设置窗体的大小
		 JF.setLocation(500,300);//设置窗体的位置
		 JF.setTitle("简单登陆界面");//设置窗体的标题
		 FlowLayout fl = new FlowLayout();//实例化一个流式布局类对象
		 JButton JB1 = new JButton("登  录");//实例化一个按钮对象
		 JButton JB2 = new JButton("注  册");//实例化一个按钮对象
		 JLabel JL1 = new JLabel("用户名");//实例化一个标签对象
		 JLabel JL2 = new JLabel("密码");//实例化一个标签对象
		 JTextField JT = new JTextField(10);//实例化一个文本对象
		 JPasswordField JW = new JPasswordField(10);//实例化一个文本对象
		 JF.setLayout(fl);//设置窗体的布局为流式布局
		 JF.setResizable(false);//设置窗体是否可以自由改变大小
		 //将对象添加到窗体上
		 JF.add(JL1);
		 JF.add(JT);
		 JF.add(JL2);
		 JF.add(JW);
		 JF.add(JB1);
		 JF.add(JB2);
		 LoginListener l1 = new LoginListener(JT);//实例化一个LoginListener事件处理对象
		 RegisterListener l2 = new RegisterListener();
		 JT.addActionListener(l1);
		 JB1.setActionCommand(" 登录 ");//设置动作命令
		 JB1.addActionListener(l1);//捕获动作
		 JB2.setActionCommand(" 注册 ");//设置动作命令
		 JB2.addActionListener(l2);
		 JF.setVisible(true);//设置窗体是否可见
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值