Java事件处理是采用“委派事件模型”。是指当事件发送时,生产事件的对象(即事件源),会把此“信息”传递给“事件监听者”处理的一种方式,而这里所说的“信息”实践上就是java.awt.event事件类库里某个类所创建的对象,我们暂时把它称为“事件的对象”。一个事件源可被多个监听者监听

一个类要实现监听者的步骤

  Ⅰ.实现相对应的接口[KeyListener,MouseListener,ActionLister,WindowListener]

  Ⅱ.把接口的处理方法根据需要重新编写

  Ⅲ.在事件源注册监听

  Ⅳ.事件传到是靠事件对象

 

事件类型

接口名称

事件类

接口方法及说明

ActionListener

ActionEvent动作事件类

 

actionPerformed(ActionEvent e)

单击按钮、选择菜单项或在文本框中按回车时

AdjustmentListener

AdjustmentEvent调整事件类

 

adjustmentValueChanged(AdjustmentEvent e)

当改变滚动条滑块位置时

ComponentListener

ComponentEvent组件事件类

 

componentMoved(ComponentEvent e)组件移动时

componentHidden(ComponentEvent e)组件隐藏时

componentResized(ComponentEvent e)组件缩放时

componentShown(ComponentEvent e)组件显示时

ContainerListener

ContainerEvent容器事件类

 

componentAdded(ContainerEvent e)添加组件时

componentRemoved(ContainerEvent e) 移除组件时

FocusListener

FocusEvent焦点事件类

focusGained(FocusEvent e)组件获得焦点时

focusLost(FocusEvent e)组件失去焦点时

 ItemListener

ItemEvent选择事件类

 

itemStateChanged(ItemEvent e)

选择复选框、选项框、单击列表框、选中带复选框菜单时

 KeyListener

KeyEvent键盘事件类

 

keyPressed(KeyEvent e)键按下时

keyReleased(KeyEvent e) 键释放时

keyTyped(KeyEvent e)击键时

 MouseListener

MouseEvent鼠标事件类

 

mouseClicked(MouseEvent e) 单击鼠标时

mouseEntered(MouseEvent e)鼠标进入时

mouseExited(MouseEvent e)鼠标离开时

mousePressed(MouseEvent e)鼠标键按下时

mouseReleased(MouseEvent e) 鼠标键释放时

 MouseMotionListener

MouseEvent鼠标移动事件类

 

mouseDragged(MouseEvent e)鼠标拖放时

mouseMoved(MouseEvent e)鼠标移动时

 TextListener

TextEvent文本事件类

 

textValueChanged(TextEvent e)

文本框、多行文本框内容修改时

 WindowListener

WindowEvent窗口事件类

 

windowOpened(WindowEvent e)窗口打开后

windowClosed(WindowEvent e)窗口关闭后

windowClosing(WindowEvent e)窗口关闭时

windowActivated(WindowEvent e)窗口激活时

windowDeactivated(WindowEvent e) 窗口失去焦点时

windowIconified(WindowEvent e)窗口最小化时

windowDeiconified(WindowEvent e) 最小化窗口还原时

 

 

 

  1 /*
  2  * 作者:白客C
  3  * 时间:2020年03月08日
  4  * 功能:事件处理机制
  5  */
  6 
  7 package com.beekc.www;
  8 import java.awt.*;
  9 import javax.swing.*;
 10 import java.awt.event.*;
 11 
 12 //继承JFanme,实现ActionListener接口实现该类方法
 13 public class Beekc extends JFrame implements ActionListener{
 14 
 15     //定义组件
 16     MyPanel myPanel =null;
 17     JButton jb1 = null,jb2 = null;
 18 
 19     public static void main(String[] args) {
 20         Beekc beekc = new Beekc();
 21     }
 22 
 23     //构造函数
 24     public Beekc()
 25     {
 26         //创建组件
 27         myPanel = new MyPanel();
 28         jb1 = new JButton("黑色");
 29         jb2 = new JButton("红色");
 30 
 31         //设置布局管理器
 32 
 33         //添加组件
 34         this.add(jb1,BorderLayout.NORTH);
 35         this.add(myPanel);
 36         myPanel.setBackground(Color.BLACK);
 37         this.add(jb2,BorderLayout.SOUTH);
 38 
 39         //注册监听
 40         //this是监听者;jb1是事件源
 41         jb1.addActionListener(this);
 42         Cat cat =new Cat();
 43         //猫猫也是监听者
 44         jb1.addActionListener(cat);
 45         //指定action命令
 46         jb1.setActionCommand("BLACK");
 47 
 48         jb2.addActionListener(this);
 49         jb2.addActionListener(cat);
 50         jb2.setActionCommand("RED");
 51 
 52         //设置窗体
 53         this.setTitle("事件设置机制");
 54         this.setSize(300,200);
 55         this.setResizable(false);
 56         this.setLocation(200,200);
 57         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 58 
 59         //显示
 60         this.setVisible(true);
 61     }
 62 
 63     //实现接口的方法
 64     //事件处理方法
 65     @Override
 66     public void actionPerformed(ActionEvent actionEvent) {
 67         if(actionEvent.getActionCommand().equals("BLACK"))
 68         {
 69             System.out.println("你点击了黑色");
 70             myPanel.setBackground(Color.BLACK);
 71 
 72         }else if(actionEvent.getActionCommand().equals("RED"))
 73         {
 74             System.out.println("你点击了红色");
 75             myPanel.setBackground(Color.RED);
 76         }else{
 77 
 78         }
 79     }
 80 }
 81 
 82 //我的面板
 83 class MyPanel extends Panel
 84 {
 85     //覆盖paint
 86     public void paint(Graphics g)
 87     {
 88         super.paint(g);
 89     }
 90 }
 91 
 92 //猫猫
 93 class Cat implements ActionListener
 94 {
 95     @Override
 96     //事件处理方法
 97     public void actionPerformed(ActionEvent actionEvent) {
 98         if(actionEvent.getActionCommand().equals("BLACK"))
 99         {
100             System.out.println("猫猫点击了黑色");
101             //myPanel.setBackground(Color.BLACK);
102 
103         }else if(actionEvent.getActionCommand().equals("RED"))
104         {
105             System.out.println("猫猫点击了红色");
106             //myPanel.setBackground(Color.RED);
107         }else{
108 
109         }
110     }
111 }

 

事件接口实例

  1 /*
  2  * 作者:白客C
  3  * 时间:2020年03月08日
  4  * 内容:事件接口处理
  5  */
  6 
  7 package com.beekc.www;
  8 
  9 import java.awt.*;
 10 import javax.swing.*;
 11 import java.awt.event.*;
 12 
 13 //继承JFanme
 14 public class Beekc extends JFrame{
 15 
 16     //定义组件
 17     MyJPanel myJPanel = null;
 18 
 19     public static void main(String[] args)
 20     {
 21         Beekc beekc = new Beekc();
 22     }
 23 
 24     //构造函数
 25     public Beekc(){
 26         //创建组件
 27         myJPanel = new MyJPanel();
 28 
 29         //设置布局管理器
 30         //添加组件
 31         this.add(myJPanel);
 32 
 33         //注册监听
 34         this.addMouseListener(myJPanel);
 35         this.addKeyListener(myJPanel);
 36         this.addMouseMotionListener(myJPanel);
 37         this.addWindowListener(myJPanel);
 38 
 39         //设置窗体
 40         this.setSize(400,300);
 41         this.setLocation(200,200);
 42         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 43 
 44         //显示
 45         this.setVisible(true);
 46     }
 47 
 48 }
 49 
 50 //我的面板,继承多个事件类接口
 51 class MyJPanel extends JPanel implements MouseListener,KeyListener,MouseMotionListener,WindowListener{
 52 
 53     //覆盖paint函数
 54     public void paint(Graphics g)
 55     {
 56         //画笔
 57         super.paint(g);
 58     }
 59 
 60     @Override
 61     //鼠标被点击
 62     public void mouseClicked(MouseEvent mouseEvent) {
 63         System.out.println("鼠标点击了 x = " + mouseEvent.getX() + "y = " + mouseEvent.getY());
 64     }
 65 
 66     @Override
 67     //鼠标按下
 68     public void mousePressed(MouseEvent mouseEvent) {
 69         System.out.println("鼠标按下了");
 70     }
 71 
 72     @Override
 73     //鼠标松开
 74     public void mouseReleased(MouseEvent mouseEvent) {
 75         System.out.println("鼠标松开了");
 76     }
 77 
 78     @Override
 79     //鼠标被移动到界面
 80     public void mouseEntered(MouseEvent mouseEvent) {
 81         System.out.println("鼠标来了");
 82     }
 83 
 84     @Override
 85     //鼠标离开界面
 86     public void mouseExited(MouseEvent mouseEvent) {
 87         System.out.println("鼠标离开了");
 88     }
 89 
 90     @Override
 91     //键输入 比如q,w
 92     public void keyTyped(KeyEvent keyEvent) {
 93 
 94     }
 95 
 96     @Override
 97     //键按下
 98     public void keyPressed(KeyEvent keyEvent) {
 99         System.out.println(keyEvent.getKeyChar() + "被按下");
100     }
101 
102     @Override
103     //键松开
104     public void keyReleased(KeyEvent keyEvent) {
105 
106     }
107 
108     @Override
109     //鼠标拖拽
110     public void mouseDragged(MouseEvent mouseEvent) {
111 
112     }
113 
114     @Override
115     //鼠标移动
116     public void mouseMoved(MouseEvent mouseEvent) {
117         //System.out.println("鼠标当前位置 x = " + mouseEvent.getX() + "y = " + mouseEvent.getY());
118     }
119 
120     @Override
121     //窗口打开
122     public void windowOpened(WindowEvent windowEvent) {
123         System.out.println("窗口被打开");
124     }
125 
126     @Override
127     //窗口正在关闭
128     public void windowClosing(WindowEvent windowEvent) {
129         System.out.println("窗口正在被关闭");
130     }
131 
132     @Override
133     //窗口关闭
134     public void windowClosed(WindowEvent windowEvent) {
135         System.out.println("窗口被关闭");
136     }
137 
138     @Override
139     //窗口最小化时
140     public void windowIconified(WindowEvent windowEvent) {
141         System.out.println("窗口被最小化");
142     }
143 
144     @Override
145     //窗口最小化后被还原
146     public void windowDeiconified(WindowEvent windowEvent) {
147         System.out.println("窗口被还原");
148     }
149 
150     @Override
151     //窗口激活了
152     public void windowActivated(WindowEvent windowEvent) {
153         System.out.println("窗口激活了");
154     }
155 
156     @Override
157     //窗口失去焦点时
158     public void windowDeactivated(WindowEvent windowEvent) {
159         System.out.println("窗口失去焦点");
160     }
161 }

 

移动的小球实例

  1 /*
  2  * 作者:白客C
  3  * 时间:2020年03月08日
  4  * 功能:用方向盘控制小球移动
  5  * 内容:加深对事件机制处理的理解
  6  */
  7 
  8 package com.beekc.www;
  9 import java.awt.*;
 10 import javax.swing.*;
 11 import java.awt.event.*;
 12 
 13 //继承JFanme
 14 public class Beekc extends JFrame{
 15 
 16     //定义组件
 17     MyPanel myPanel = null;
 18     public static void main(String[] args){
 19         Beekc beekc = new Beekc();
 20     }
 21 
 22     //构造函数
 23     public Beekc()
 24     {
 25         //创建组件
 26         myPanel = new MyPanel();
 27 
 28         //设置布局管理器
 29 
 30         //添加组件
 31         this.add(myPanel);
 32 
 33         //注册监听键盘
 34         this.addKeyListener(myPanel);
 35 
 36         //设置窗口
 37         this.setTitle("移动的小球");
 38         this.setSize(400,300);
 39         this.setLocation(200,200);
 40         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 41 
 42         //显示
 43         this.setVisible(true);
 44 
 45 
 46     }
 47 
 48 }
 49 
 50 //我的面板
 51 class MyPanel extends JPanel implements KeyListener
 52 {
 53     //界面的x轴,y轴
 54     int x = 10;
 55     int y = 10;
 56     //小球的速度
 57     int speed = 5;
 58     //覆盖paint函数
 59     public void paint(Graphics g)
 60     {
 61         super.paint(g);
 62         //画出小球
 63         g.fillOval(x,y,10,10);
 64     }
 65 
 66     @Override
 67     //键盘的一个值被输出
 68     public void keyTyped(KeyEvent keyEvent) {
 69 
 70     }
 71 
 72     @Override
 73     //键盘被按下
 74     public void keyPressed(KeyEvent keyEvent) {
 75         //小球方向
 76         if(keyEvent.getKeyCode() == keyEvent.VK_DOWN)
 77         {
 78             //向下
 79             y+=speed;
 80         }else if(keyEvent.getKeyCode() == keyEvent.VK_UP)
 81         {
 82             //向上
 83             y-=speed;
 84         }else if(keyEvent.getKeyCode() == keyEvent.VK_LEFT)
 85         {
 86             //向左
 87             x-=speed;
 88         }else if(keyEvent.getKeyCode() == keyEvent.VK_RIGHT)
 89         {
 90             //向右
 91             x+=speed;
 92         }
 93 
 94         //调用repaint(),重绘界面
 95         this.repaint();
 96     }
 97 
 98     @Override
 99     //键盘被释放
100     public void keyReleased(KeyEvent keyEvent) {
101 
102     }
103 }

posted on 2020-03-08 16:23  白客C  阅读(1314)  评论(0编辑  收藏  举报