当前位置:
文档之家› 项目十 鼠标和键盘事件的响应
项目十 鼠标和键盘事件的响应
else if(e.getKeyChar()=='b'||e.getKeyChar()=='B') c=Color.blue;
else c=Color.black;
repaint(); }} public void paint(Graphics g) {
g.setColor(c); g.fillOval(60,60,100,100); } public static void main(String args[]){ new hh(); } }
(4)mouseExited(MouseEvent)方法,鼠标指针离开容器时, 接口监视器发现这个事件后自动调用这个方法。
new hh(); } }
10.2.3 键盘适配器类KeyAdapter
使用KeyListener接口时,即使有些方法不使用也必须在 程序中写出接口的所有方法,因此比较麻烦,而 java.awt.event.keyAdapter类本身就使用了KeyListener接口, 并对接口的三个方法增加了空方法体,因此使用keyAdapter 类时不必像使用接口那样实现所有方法,只需覆盖要响应的 键盘事件方法即可。
④事件监听器监听到事件后,会根据事件的类型调用相应的 事件处理方法。
事件源
产生事 件
事件 1
捕获事件
监视器1
事件 2
监视器2
图10-1 事件处理模型
事件处 理
事件处 理
1.java.awt.event包
(1)文本框回车、按钮单击、计时器、菜单项 引发动作事件:java.awt.event.ActionEvent 处理事件的接口:java.awt.event.ActionListener 接口中的方法:public void actionPerformed(ActionEvent event) (2)单选按钮、多选按钮、下拉列表 引发选项事件:java.awt.event.ItemEvent 处理事件的接口:java.awt.event.ItemListener 接口中的方法:public void itemStateChanged(ItemEvent event)
public void valueChanged(TreeSelectionEvent event)
(3)滑动杆(JSlider) 引发改变事件:java.swing.event.ChangeEvent 处理事件接口:java.swing.event.ChangeListener 接口中的方法:
public void stateChanged(ChangeEvent event)
JButton1=new JButton("请按M键!"); JButton1.addKeyListener(this); this.setSize(200,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jpanel1.add(JButton1); this.add(jpanel1); this.setVisible(true); }
(4)getClickCount()获取点击次数;
2.添加鼠标监视器的方法:public void addMouseListener()。
3.移去鼠标监视器的方法:public void removeMouseListener().
10.3.2 使用MouseListener接口处理鼠标事件
通过使用java.awt.event.MouseListener接口可以对鼠标事件进 行处理,它有以五个方法:
(1)mousePressed(MouseEvent)方法,按下鼠标时,接口 监视器发现这个事件后自动调用这个方法。
(2)mouseReleased(MouseEvent)方法,松开鼠标时,接口 监视器发现这个事件后自动调用这个方法。
(3)mouseEntered(MouseEvent)方法,鼠标指针进入容器时, 接口监视器发现这个事件后自动调用这个方法。
(3)键盘 引发动作事件:java.awt.event.KeyEvent 处理事件的接口:java.awt.event.KeyListener (4)鼠标 引发鼠标事件:java.awt.event.MouseEvent 处理事件的接口:java.awt.event.MouseListener 与java.awt.event.MouseMotionListener接口。
这个接口有三个方法: 1.keyPressed(KeyEvent e)响应按下键盘事件; 2.keyTyped(KeyEvent e)响应按下又松开键盘事件; 3.keyReleased(KeyEvent e)响应松开键盘事件; 它们都是public void方法,事件源要使用addKeyListener方 法添加监视器来获得事件。
【例10-1】对键盘事件进行响应。 import java.awt.event.*; import javax.swing.*; import java.awt.*; public class hh extends JFrame implements KeyListener{
JButton JButton1; hh(){ JPanel jpanel1=new JPanel();
2.java.swing.event包 (1)列表(JList) 引发列表选择事件:java.swing.event.ListSelectionEvent 处理事件接口:java.swing.event.ListSelectionListener 接口中的方法:
public void valueChanged(ListSelectionEvent event) (2)树(JTree) 引发树选择事件:java.swing.event.TreeSelectionEvent 处理事件接口:java.swing.event.TreeSelectionListener 接口中的方法:
10.2 任务二 掌握对键盘事件响应方法
10.2.1 键盘事件
当键盘按下、释放、点击时都会触发键盘事件 (java.awt.event.KeyEvent),常用的KeyEvent方法是 public int getKeyCode(),它用于获取所按下键的编码 值。
键盘事件类提供了很多静态常量表示键的编码值,如: V_UP 上箭头键的编码值 VK_1 键1的编码值 VK_ENTER 表示回车编码值 VK_SPACE 表示空格键编码值
更多的键码值可以查阅Java API文档来获得。 编写键盘事件响应程序时,使用语句 if(e.getKeyCode()==KeyEvent.VK_B)可以判断是否按下了字 母键B,然后做相应处理,语句中的e是事件处理时接收的键 盘事件对象参数名。
10.2.2 键盘监听接口KeyListener
对键盘事件可以通过java.awt.event.KeyListener接口中提 供的方法来处理。
监视器负责处理事件源发生的事件。监视器是个对象,为 了处理事件源发生的事件,监视器会自动调用一个方法来 处理事件。为了让监视器能对事件源发生的事件进行处理, 创建该监视器的类必须声明实现相应的接口,即必须在类 体中给出该接口中所有方法的方法体,这样在事件源发生
事件时,监视器就自动调用执行被类实现的某个接口方法
①若要保证一个组件产生的某种类型事件XXXEvent有效, 需要注册一个“事件监听器”监听它。用如下语句设置事件 监听器:
事件源.addXXXListener(XXXListener代表某种事件监听器)。
②组件作为事件源,不同类型的组件会产生特定类型的事件。
③一旦产生事件后,事件会被传送给已注册的一个或多个监 听器。事件监听器是实现了与该事件相对应的XXXListener 接口的类。
下面的程序是通过使用键盘适配器类来实现响应键盘事 件,当分别按“R”、“G”、“B”时将圆的颜色设置为 红色、绿色和蓝色。
【例10-2】 import java.awt.event.*; import javax.swing.*; import java.awt.*; public class hh extends JFrame{
10.3 任务三 掌握对鼠标事件的响应方法
10.3.1 鼠标事件
鼠标事件源各种动作可以触发鼠标事件,如按下鼠标、点击鼠 标、释放鼠标、鼠标进入和鼠标退出。鼠标事件类型是 java.awt.event.MouseEvent,当发生鼠标事件时 MouseEvent类自动创建一个鼠标事件对象。
1.MouseEvent类有几个常用的方法: (1)getX()用于获取鼠标x坐标 (2)getY()用于获取鼠标y坐标;
10.1.2 事件处理机制
Java采用“授权事件模型”(Event Delegation Model) 的事件处理模式。其原理为:事先定义多种事件类型 (即用户在GUI组件上进行的操作,如单击事件),当 用户对某个GUI组件进行操作时,可能触发相应的事件, 这个组件就是事件源。如果此组件注册了事件监听器 (可以通过addXXXXListener方法注册),事件被传 送给已注册的监听器,事件监听器负责处理事件的过程。 一个组件可以注册一个或多个监听器。
java.awt.AWTEvent类是所有事件类的父类。
2.事件源:能够产生事件的对象都可以称之为事件源,如 键盘、鼠标、按钮等。
3.事件处理方法:能够接收、解析处理事件类对象,实现 和用户交互的方法。它以事件对象为参数。
4.监视器:对事件源进行监视,使发生事件时做出处理的 一种特殊的对象。事件源通过调用相应的方法将某个对 象作为自己的监视器。
(3)getButton()用于获取鼠标的左中右键值;根据键值来知 道按的是哪一个键,MouseEvent.BUTTON1、 MouseEvent.BUTTON2和MouseEvent.BUTTON3分别是左 中右三个键值。例如在程序中通过 if(e.getButton()==MouseEvent.BUTTON1)可以判断按的是 否是左键。