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 }