java中事件处理机制的深入理解


import java.awt.*;

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

public class Test extends JFrame implements ActionListener{

 
 JPanel jp=null;
 JButton jb1=null;
 JButton jb2=null;
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  Test tt=new Test();
 }

 public Test()
 {
  jp=new JPanel();
  jb1=new JButton("黑色");
  jb2=new JButton("红色");
  
  this.add(jb1,BorderLayout.NORTH);
  //jp.setBackground(Color.black);
  this.add(jp);
  this.add(jb2,BorderLayout.SOUTH);
  
  
  Cat mycat=new Cat();
  //注册监听事件
  jb1.addActionListener(this);//事件源对象是jb1,事件监听对象mycat和this
  jb1.addActionListener(mycat);
  jb1.setActionCommand("黑色");//指定Action命令
  jb2.addActionListener(this);
  jb2.addActionListener(mycat);
  jb2.setActionCommand("红色");//指定Action命令
  
  this.setSize(500,400);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setVisible(true);
 }

 @Override
 //对事件处理的方法
 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  //判断是那个按钮被点击
  if(e.getActionCommand().equals("黑色"))
  {
   System.out.println("你点击黑色按钮");
   jp.setBackground(Color.black);
  }
  else if(e.getActionCommand().equals("红色"))
  {
   System.out.println("你点击红色按钮");
   jp.setBackground(Color.red);
  }
  else
  {
   System.out.println("不知道");
  }
 }
}


//任何一个类只要实现它相应的接口 就可以去监听某个事件源
class Cat implements ActionListener
{

 @Override
 public void actionPerformed(ActionEvent e) {
  // TODO Auto-generated method stub
  if(e.getActionCommand().equals("黑色"))
  {
   System.out.println("猫按下黑色按钮");
  }
  else if(e.getActionCommand().equals("红色"))
  {
   System.out.println("猫按下红色按钮");
  }
 }
 }

 

 * a先写一个类要实现监听的步骤
 * b实现相应的接口【ActionListener,keyListener,mouseListener,windowListener】
 * c把接口的处理方法根据需要重新编写override
 * d在事件源组测监听
 * e事件传递是靠事件对象

 

事件源-----------------------事件(对象)--------------------------》事件监听者(事件处理方法)

 

几个现实中的例子:

小偷打了小孩------------------(小孩)-------------------》小孩告诉给妈妈(妈妈来处理)

 

    事件源:是一个产生(或触发)事件的对象,当这个事件对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件),如果某个组件(对象)希望的到事件源产生的事件,就需要在这个事件源上注册。

 

   事件:就是承载事件源状态改变时的信息对象,或者说事件是事件源向事件监听传输事件源状态信息的载体,在用户与GUI组件进行交互时就会生产事件,比如当鼠标在面板中移动,就会生成一个鼠标移动事件的对象,而这个对象保存着当鼠标在面部中位置的信息。

 

   事件监听器接口:事件源产生一个事件,可以传送给事件监听者处理,实际上事件监听者就是一个类,应该实现了某个事件监听器接口,在它实现了接口,就可以作为一个事件监听者,对接收到的事件进行处理。

 

 

  重点总结:不同事件监听器接口可以监听不同的事件,一个类可以实现一个事件监听接口,也可以实现多个监听接口。

 


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

public class Test extends JFrame{

 
 Mypanel mp=null;
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Test tt=new Test();
 }
 public Test()
 {
  
  mp=new Mypanel();
  //组册监听
  this.addMouseListener(mp);
  this.addWindowListener(mp);
  this.addMouseMotionListener(mp);
  
  this.add(mp);
  this.setSize(500,400);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setVisible(true);
  
 }

}

class Mypanel extends JPanel implements MouseListener,WindowListener,MouseMotionListener
{
 public void paint(Graphics g)
 {
  super.paint(g);
 }

 @Override
 public void mouseClicked(MouseEvent e) {
  // TODO Auto-generated method stub
  System.out.println("mouseClicked");
 }

 @Override
 //鼠标点击的位置
 public void mousePressed(MouseEvent e) {
  // TODO Auto-generated method stub
  System.out.println("x="+e.getX()+"Y="+e.getY());
 }

 @Override
 public void mouseReleased(MouseEvent e) {
  // TODO Auto-generated method stub
  System.out.println("mouseReleased");
 }

 @Override
 //鼠标进入
 public void mouseEntered(MouseEvent e) {
  // TODO Auto-generated method stub
  System.out.println("鼠标进入");
 }

 @Override
 //鼠标离开
 public void mouseExited(MouseEvent e) {
  // TODO Auto-generated method stub
  System.out.println("鼠标离开");
 }

 @Override
 //窗口被打开
 public void windowOpened(WindowEvent e) {
  // TODO Auto-generated method stub
  System.out.println("窗口被打开");
 }

 @Override
 //窗口真正关闭
 public void windowClosing(WindowEvent e) {
  // TODO Auto-generated method stub
  System.out.println("窗口真正关闭");
 }

 @Override
 //窗口关闭了
 public void windowClosed(WindowEvent e) {
  // TODO Auto-generated method stub
  System.out.println("窗口关闭了");
 }

 @Override
 public void windowIconified(WindowEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void windowDeiconified(WindowEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 //窗口激活
 public void windowActivated(WindowEvent e) {
  // TODO Auto-generated method stub
  System.out.println("窗口激活");
 }

 @Override
 //窗口最小化
 public void windowDeactivated(WindowEvent e) {
  // TODO Auto-generated method stub
  System.out.println("窗口最小化");
 }

 @Override
 public void mouseDragged(MouseEvent e) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseMoved(MouseEvent e) {
  // TODO Auto-generated method stub
  System.out.println("当前坐标:"+e.getX()+"."+e.getY());
 }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值