第7章 Java 中的鼠标事件与键盘事件

39
7 7 Java Java 第第第第第第 第第第第第第 第第第第第 第第第第第 7.1 第 第 第 第 7.2 第第第第第第 7.3

description

第7章 Java 中的鼠标事件与键盘事件. 7.1 鼠 标 事 件 7.2 处理鼠标输入 7.3 键 盘. 7.1 鼠 标 事 件. 7.1.1 MouseListener 接口 鼠标监听接口( MouseListener) 用于监听发生在一个 GUI 构件上的鼠标事件,包括鼠标的按下、释放、单击、进入和退出。 Java 同时也提供了与该接口相对应的称作事件剪裁器的抽象类 MouseAdapter。. - PowerPoint PPT Presentation

Transcript of 第7章 Java 中的鼠标事件与键盘事件

Page 1: 第7章   Java 中的鼠标事件与键盘事件

第第 77 章 章 JavaJava 中的鼠标中的鼠标事件与键盘事件事件与键盘事件7.1 鼠 标 事 件

7.2 处理鼠标输入

7.3 键 盘

Page 2: 第7章   Java 中的鼠标事件与键盘事件

7.1 7.1 鼠 标 事 件鼠 标 事 件7.1.1 7.1.1 MouseListenerMouseListener 接口接口

鼠标监听接口( MouseListener )用于监听发生在一个 GUI 构件上的鼠标事件,包括鼠标的按下、释放、单击、进入和退出。Java 同时也提供了与该接口相对应的称作事件剪裁器的抽象类 MouseAdapter 。

Page 3: 第7章   Java 中的鼠标事件与键盘事件

在一个实现了 MouseListener 接口或继承了 MouseAdapter 类的类中可以定义事件的处理方法,而该类的一个对象则应该用 addMouseListener() 方法注册到发生鼠标事件的构件上。

MouseListener 接口包含的方法如下。

Page 4: 第7章   Java 中的鼠标事件与键盘事件

( 1 ) public void mouseClicked ( MouseEvent 节 e ) 当在一个构件上单击鼠标时被调用。

( 2 ) public void mousePressed ( MouseEvent e ) 当在一个构件上按下鼠标按钮时被调用。

( 3 ) public void mouseReleased ( MouseEvent e ) 当在一个构件上释放鼠标按钮时被调用。

Page 5: 第7章   Java 中的鼠标事件与键盘事件

( 4 ) public void

mouseEntered ( MouseEvent e ) 当鼠标指针进入构件时被调用。

( 5 ) public void

mouseExited ( MouseEvent e ) 当鼠标指针退出构件时被调用。

Page 6: 第7章   Java 中的鼠标事件与键盘事件

7.1.2 7.1.2 MouseMoutionListenerMouseMoutionListener 接接口口

鼠 标 移 动 监 听 接 口( MouseMoutionListener )用于监听发生在一个 GUI 构件上的鼠标移动事件,包括鼠 标 的 移 动 和 拖 动 , 其 使 用 方 法 与MouseListener 接口相同。它所包含的方法如下。

Page 7: 第7章   Java 中的鼠标事件与键盘事件

( 1 ) public void mouseDragged ( MouseEvent e ) 当在一个构件上按下鼠标按钮并且拖动鼠标时该方法被调用。鼠标拖动事件持续到鼠标按钮被释放时为止,而不管鼠标的位置是否超出了原来构件的边界。

( 2 ) public void mouseMoved ( MouseEvent e ) 当鼠标指针移动时该方法被调用,注意此时鼠标的按钮并没有被按下。

Page 8: 第7章   Java 中的鼠标事件与键盘事件

在 MouseListener 接 口 和MouseMotionListener 接 口 中 的 所 有 方 法中 都 有 一 个 参 数 , 它 是 鼠 标 事 件 类MouseEvent 的一个对象,当鼠标事件发生时,系统自动生成一个该类的对象,在鼠标事件的处理方法中,经常需在调用该类的 方 法 来 获 得 关 于 事 件 的 一 些 信息。 MouseEvent 类的常用方法如下。

Page 9: 第7章   Java 中的鼠标事件与键盘事件

( 1 ) public int getX() 返回当前鼠标指针位置的 x坐标值。

( 2 ) public int getY() 返回当前鼠标指针位置的 y坐标值。

( 3 ) public int getClickCount() 返回事件中鼠标的点击次数。

( 4 ) public String paramString() 返回一个标识该事件的字符串。

Page 10: 第7章   Java 中的鼠标事件与键盘事件

7.2 7.2 处理鼠标输入处理鼠标输入例 7-1 :设计一个处理鼠标输入的程

序,使得在一个画布构件上拖动鼠标时能画出一段曲线。

设计思路:我们假定每当按下鼠标按钮时开始画线,然后拖动鼠标继续画线过程,释放鼠标时表示一段曲线的画线过程结束,程序允许在画布构件上画出多段曲线。

Page 11: 第7章   Java 中的鼠标事件与键盘事件

一段曲线实际上由许多小的直线段构成,因此我们只需记录按下鼠标按钮时的坐标点、拖动鼠标时所产生的所有坐标点及释放鼠标时的坐标点,然后在这些坐标点之间顺序地画出直线段即连成一段曲线。为了保存这些坐标点,我们使用了一个Polygon 对象 poly ,它是由 Java 系统提供的一个类,可以保存多边形的各个顶点坐标并可以动态地加入新的坐标点。

Page 12: 第7章   Java 中的鼠标事件与键盘事件

在各段不同的曲线之间加入一个特殊的标志点(- 1, - 1 )以便在 paint() 方法中画线时确定一条新的曲线段的起点。所有坐标点的记录及保存都是在鼠标事件接口 的 mousePressed() 方法、 mouseReleased() 方法及鼠标移动事件接口中的 mouseDragged() 方法中完成的。在 paint() 方法中根据所记录的坐标点画出各个曲线段。

Page 13: 第7章   Java 中的鼠标事件与键盘事件

import java.awt.event.*;

import java.awt.*;

public class mouse extends Frame implements ActionListener{

Button butn=new Button(" 手画线状态 ");

canvas1 can=new canvas1();

Page 14: 第7章   Java 中的鼠标事件与键盘事件

public static void main(String[] args) {

new mouse();

}

mouse(){

Frame win1=new Frame();

win1.setLayout(new BorderLayout(0,0));

win1.addWindowListener(new WindowAdapter(){

Page 15: 第7章   Java 中的鼠标事件与键盘事件

public void windowClosing(WindowEvent e) {

System.exit(0);}});

win1.add(butn,BorderLayout.NORTH);

butn.addActionListener(this);

can.setSize(350,200);

can.setBackground(Color.green);

Page 16: 第7章   Java 中的鼠标事件与键盘事件

win1.add(can,BorderLayout.CENTER);

win1.setTitle(" 用鼠标画直线 ");

win1.setSize(400,200);

win1.setVisible(true);

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==butn)

can.mode=1;// 设置画线状态 }

}

Page 17: 第7章   Java 中的鼠标事件与键盘事件

class canvas1 extends Canvas implements MouseListener,MouseMotionListener{

int mode=0;// 方式变量,初始值为非画线状态 Polygon poly=new Polygon();// 用类 Polygon 的对象来存储画线时点的坐标 canvas1(){

addMouseListener(this);// 注册鼠标事件 addMouseMotionListener(this);// 注册鼠标移动事件 }

Page 18: 第7章   Java 中的鼠标事件与键盘事件

public void paint(Graphics g) {

g.setColor(Color.blue);// 设置画笔颜色 if(mode==1&&poly.npoints>1)// 用坐标点画出曲线的方法 for(int i=0;i<poly.npoints-1;i++){

if (poly.xpoints[i+1]==-1){

i++;

continue;

}

Page 19: 第7章   Java 中的鼠标事件与键盘事件

else

g.drawLine(poly.xpoints[i],poly.ypoints[i],poly.xpoints[i+1],poly.ypoints[i+1]);

}

}

public void mouseClicked(MouseEvent e){}

Page 20: 第7章   Java 中的鼠标事件与键盘事件

public void mousePressed(MouseEvent e){// 按下鼠标按钮时记录坐标起点 poly.addPoint(e.getX(),e.getY());

}

public void mouseReleased(MouseEvent e){// 释放鼠标记录坐标点 poly.addPoint(e.getX(),e.getY());// 加入手画线的终点坐标 poly.addPoint(-1,-1);// 加入一个特殊的标记点它标志曲线的结束 repaint();// 重画曲线 }

Page 21: 第7章   Java 中的鼠标事件与键盘事件

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseMoved(MouseEvent e){}

Page 22: 第7章   Java 中的鼠标事件与键盘事件

public void mouseDragged(MouseEvent e){// 拖动鼠标时加入坐标点并重画曲线 poly.addPoint(e.getX(),e.getY());

repaint();

}

}

运行结果见图 7-1 。

Page 23: 第7章   Java 中的鼠标事件与键盘事件

图 7-1

Page 24: 第7章   Java 中的鼠标事件与键盘事件

7.3 7.3 键 盘键 盘7.3.1 7.3.1 键盘事件键盘事件

在 Java 中与键盘事件有关的接口和类 主 要 有 KeyListener 、 KeyAdapter 及KeyEvent 。 其 中 KeyListener 和KeyAdapter 用于监听键盘事件的发生并将其传送到相应的事件处理方法中去,而KeyEvent 主要用于提供事件发生时的有关信息。

Page 25: 第7章   Java 中的鼠标事件与键盘事件

KeyListener 接口能够监听的键盘事件有 3 种:键按下( Pressed )、键释放( Released )及键的按下并释放( Typed ),相应的事件处理方法如下。

( 1 ) public void keyTyped(KeyEvent

e) 当键盘上的一个键被按下并释放后该方法被调用。

Page 26: 第7章   Java 中的鼠标事件与键盘事件

( 2 ) public void

keyPressed(KeyEvent e) 当键盘上的一个键盘被按下后该方法被调用。

( 3 ) public void

keyReleased(KeyEvent e) 当键盘上的一个键盘被释放时该方法被调用。

Page 27: 第7章   Java 中的鼠标事件与键盘事件

KeyEvent 类中常用的方法如下。

( 1 ) public int getKeyCode() 返回键盘事件中相关键的整数类型键码。

( 2 ) public char getKeyChar() 返回键盘事件中相关键的字符类型键码。例如,对于 Shift+a 键返回的字符是 A 。

Page 28: 第7章   Java 中的鼠标事件与键盘事件

( 3 ) public static String

getKeyText(int keyCode) 返回一个描述由参 数 int keyCode 指 定 的 键 的 字 符 串 ,如 "HOME" , "F1" 或 "A". 等。

( 4 ) public String paramString()

返回一个标识该事件的参数字符串。

Page 29: 第7章   Java 中的鼠标事件与键盘事件

7.3.2 7.3.2 处理键盘输入处理键盘输入例 7-2 :处理键盘输入的例子。在该

例子中,创建了一个文本框和 4 个文本区,文本框用来接受键盘的输入并注册了键盘事件监听者。在前 3 个文本区中分别显示在 Pressed 、 Released 、 Typed 方法中相关联的键所对应的字符,

Page 30: 第7章   Java 中的鼠标事件与键盘事件

比如 如 果 按 下 的 键 是“ a” 则显示 “ a” , 而 如 果 是 一 些 功 能 键如“ HOME” 则没有相对应的键符可以显示 , 此 时 我 们 用e.getKeyText ( e.getKeyCode() ) 在 第 4

个文本区中显示该功能键对应的描述性字符串,如 Home 、 Left 、 F1 、 End 等。

Page 31: 第7章   Java 中的鼠标事件与键盘事件

import java.awt.event.*;

import java.awt.*;

public class key implements KeyListener{

TextField tx = new TextField(20);

TextArea ta1 = new TextArea("显示按下的键: \n",7,20);

TextArea ta2 = new TextArea("显示释放的键: \n",7,20);

Page 32: 第7章   Java 中的鼠标事件与键盘事件

TextArea ta3 = new TextArea("显示控制与功能键: \n",7,20);

TextArea ta4 = new TextArea(null,2,20);

public void keyTyped(KeyEvent e) {

ta4.append(String.valueOf(e.getKeyChar()));

}

Page 33: 第7章   Java 中的鼠标事件与键盘事件

public void keyPressed(KeyEvent e) {

ta1.append(String.valueOf(e.getKeyChar()));

//ta1.append(String.valueOf(e.getKeyCode()));

Page 34: 第7章   Java 中的鼠标事件与键盘事件

ta3.append(e.getKeyText(e.getKeyCode())+"\n");

}

public void keyReleased(KeyEvent e) {

ta2.append(String.valueOf(e.getKeyChar()));

}

Page 35: 第7章   Java 中的鼠标事件与键盘事件

key(){

Frame win1 = new Frame("Key event 应用 ");

win1.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e) {

System.exit(0);}});

Page 36: 第7章   Java 中的鼠标事件与键盘事件

win1.setLayout(new FlowLayout());

Panel p1 = new Panel();

win1.add(p1);

p1.add(new Label("请在此编辑框内键入字符: "));

p1.add(tx);

tx.addKeyListener(this);

Panel p2 = new Panel();

Page 37: 第7章   Java 中的鼠标事件与键盘事件

win1.add(p2);

p2.add(ta1);

p2.add(ta2);

p2.add(ta3);

Panel p3 = new Panel();

win1.add(p3);

Page 38: 第7章   Java 中的鼠标事件与键盘事件

p3.add(new Label("显示按下并释放的键盘: "));

p3.add(ta4);

win1.setSize(500,280);

win1.setVisible(true);

}

public static void main(String[] args) {

new key();

}

}

Page 39: 第7章   Java 中的鼠标事件与键盘事件

运行结果见图 7-2 。

图 7-2