第五章 事件处理机制 Java 事件处理机制 窗口事件 鼠标事件 键盘事件 . . . 例:ButtonTest.java.

Slides:



Advertisements
Similar presentations
Java 语言程序设计 第 6 章 Java 图形与事件处理. 本章主要内容: 6.1 图形与图形的描绘 6.1 图形与图形的描绘 图形绘制特点及绘图工具 paint() 图形绘制特点及绘图工具 paint() Graphics 类 Graphics.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
Java程序设计 常州信息职业技术学院(CCIT) 软件学院
四資二甲 第三週作業 物件導向程式設計.
Java System Concepts and Animation Programming
面向对象的程序设计(一).
第二十章 圖型介面與網路對播 (GUI and Intercross Transition) 20-1 簡介 20-2 ActionListener Interface 20-3 ActionEvent Class 20-4 Vector Class 20-5 圖型介面與視窗關閉 20-6 圖型介面與資料顯示.
第四章 Android事件处理机制 QQ群: Q Q号: 倚动软件工厂实验室.
Part 2 開發Android應用程式的流程
第一章 面向对象程序设计.
第11章 Java多媒体技术.
第七章 图形用户界面的设计与实现 学习导读 首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置、在窗口中显示文字和图像等;
第6章 图形用户界面设计 6.1 图形用户界面概述 6.2 GUI标准组件的使用 6.3 Java的事件处理 6.4 窗口及菜单设计
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
第二章 JAVA语言基础.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
AOP实践 演讲人:陈思荣.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之一).
第九章 字符串.
Java语言程序设计 马 皓
Ch06 人機介面_視窗程式設計(2) 物件導向系統分析與設計.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
Ch08 巢狀類別 物件導向程式設計(II).
GUI事件处理 主讲:赖国荣 QQ:
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Java语言程序设计 第六部分 Java图形用户界面.
Ch07 Java Applets 物件導向系統實務.
Java程序设计 JAVA 授课教师:赵小敏 浙江工业大学 软件学院
Java 程式設計 講師:FrankLin.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
电子商务技术基础 张宝明.
記事本 物件導向系統實務.
第九章 窗口、菜单和对话框 本章的任务: 介绍图形用户界面的高级组件。这些组件包括窗口、菜单和对话框等,它们可以构造出标准GUI应用程序。最后,简要介绍Java Swing的使用方法。
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
职责链模式.
記事本 物件導向系統實務.
Java程序设计 第9章 继承和多态.
JAVA 2 新觀念教本 ---邁向SCJP專業認證--- 易瓏資訊 林新德 著.
辅导课程六.
辅导课程十三.
AWT Event Model.
Ch04 事件處理 物件導向系統實務.
CH03 為自己的視窗加上小元件 物件導向系統實務.
4、按钮事件.
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
資訊學科中心研習 JAVA程式設計專題 臺北市立大理高級中學 黃世隆 2019/2/23.
事件處理.
書名 Java於資料結構與演算法之實習應用
简单工厂模式.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第十章 基于Swing的图形用户界面设计.
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
Chapter 18 使用GRASP的对象设计示例.
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
第2章 Java语言基础.
事件处理 例: import java.applet.Applet; import java.awt.*;
Presentation transcript:

第五章 事件处理机制 Java 事件处理机制 窗口事件 鼠标事件 键盘事件 . . . 例:ButtonTest.java

Java AWT事件模型工作机制 消息 监听器 事件 驱动程序 事件源

5.1事件处理基础 一.事件源:能够产生事件的对象都可以成为事件源。如文本框、按钮、鼠标、键盘等 一个事件源是一个能够注册监听器并且为监听器发送消息的一些对象 二.监听器:监听器对象会接收事件源对象发送的消息,并对发生的事件作出反应。 一个监听器对象就是一个实现了专门的监听器接口的类的对象,该类必须实现接口中的方法。 这些方法当事件发生时,被自动指行。

5.2 注册监听器方法 一、监听器类的定义 监听器类必须使用与事件源相对应的接口(例:ActionListener),从而必须 提供接口中的方法: actionPerformed(ActionEvent event) 的实现,此方法即是与事件相关联的事件驱动方法

Mylistener类的对象就可以用来作监听器 class Mylistener implements ActionListener {….    //使用了与事件相对应的接口 public void actionPerformed( ActionEvent event) { …..   //实现了接口里的方法 } Mylistener类的对象就可以用来作监听器

二.注册监听器 eventSourceObject.addEventListener( eventListenerObject) 例: MyListener listener=new MyListener(); JButton button=new JButton(“ok”); button.addActionListener(Listener);

//监听器类 private class ColorAction implements ActionListener { ……. //事件驱动方法 public void actionPerformed(ActionEvent event) { setBackground(backgroundColor); repaint(); } private Color backgroundColor; } }

//创建监听器对象 ColorAction yellowAction = new ColorAction(Color.yellow); ColorAction blueAction = new ColorAction(Color.blue); ColorAction redAction = new ColorAction(Color.red); //注册监听器 yellowButton.addActionListener(yellowAction); blueButton.addActionListener(blueAction); redButton.addActionListener(redAction); }

四.用匿名类简化程序 在例ButtonTest.java中,每个按钮需要同样的处理: 1.使用字符串构造按钮 2.把按钮添加到面板 3.用适当的颜色构造一个监听器 4.注册动作监听器

设计一个方法用来构造按钮: void makeButton(String name , color bcolor) {JButton button=new JButton(name); add(button); Coloraction act=new //监听器对象 Coloraction(bcolor); button.addActionListener(act);   }

ButtonPanel构造器变为: makeButton(“yellow”,Color.yellow); makeButton(“blue”,Color.blue); makeButton(“red”,Color.red); 进一步简化,把ColorAction改写成匿名类 void makeButton(String name ,color bcolor) {JButton button=new JButton(name); add(button);

button.addActionListener(     new ActionListener() {public void actionPerformed( actionEvent event) {setBackground(bcolor); repaint() } }); 例:NonameTest.java

5.3 窗口事件 与窗口相关的事件源是WindowEvent 窗口事件的监听器: WindowListener listener=….. 5.3 窗口事件 与窗口相关的事件源是WindowEvent 窗口事件的监听器:  WindowListener listener=…..     frame.addWindowListener(listener); 窗口监听器必须实现WindowListener接口 WindowListener接口中有七个方法,它们的名字是自解释的

一、WindowListener接口 public interface windowListener{ void windowOpened(WindowEvent e){}; void windowClosing(WindowEvent e){}; void windowClosed(WindowEvent e){}; void windowIconified(WindowEvent e){}; void windowDeiconified(WindowEvent e){}; void windowActivated(WindowEvent e){}; void windowdeactivated(WindowEvent e){};}

二、适配器类 每个具有不止一个方法的AWT监听器接口都有一个实现了它的所有方法,但却不做任何工作的适配器类。 例:WindowAdapter类 通过扩展适配器类来实现需要的动作 适配器类动态地满足了Java 中实现监视器类的技术要求

WindowAdapter类 扩展WindowAdapter类,继承六个空方法,重写WindowClosing(): class Terminator extends           WindowAdapter { public void windowClosing           (WindowEvent e)    System.exit(0); }    }

三、注册事件监听器 只要框架产生一个窗口事件,该事件就会传递给监听器对象 上面语句也可简化为: WindowListener listener=new Terminator(); frame.addWindowListener(listener); 只要框架产生一个窗口事件,该事件就会传递给监听器对象 上面语句也可简化为: frame.addWindowListener(new Terminator());

用匿名类简化 frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);} } }) ;

四、AWT事件层次图     AWT事件类的继承关系

AWT事件类型 ActionEvent Item AdjustmentEvent KeyEvent ComponentEvent MouseEvent ContainerEvent TextEvent FocusEvent WindowEvent

java.awt.event包中监听器接口 ActionListener KeyListener AdjustmentListener ContainerListener ComponentListener TextListener FocusListener WindowListener MouseListener ItemListener MouseMotionListener

适配器 ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter

AWT中的事件分类 AWT明确区分两种事件: 语义事件和低级事件 语义事件:用于表达用户动作的事件。 如:点击按钮    语义事件和低级事件 语义事件:用于表达用户动作的事件。 如:点击按钮 低级事件:把语义事件变为可能。如:对于一个按钮点击来说,它包括鼠标按下、鼠标移动和鼠标弹起低级事件 

语义事件 ActionEvent ItemEvent AdjustmentEvent TextEvent

低级事件 ComponentEvent MouseEvent ContainerEvent FocusEvent WindowEvent KeyEvent

5.4 鼠标事件 1、鼠标事件有5种: 按下鼠标 释放鼠标 击鼠标键 鼠标进入 鼠标退出 一、鼠标事件(MouseListner接口) 5.4 鼠标事件 一、鼠标事件(MouseListner接口) 1、鼠标事件有5种:   按下鼠标   释放鼠标   击鼠标键   鼠标进入   鼠标退出  Painter.java

2. 鼠标事件返回值 鼠标事件的类型是MouseEvent 当发生鼠标事件时:  MouseEvent类自动创建一个事件对象,以及事件发生位置的x和y坐标,作为事件返回值

3. MouseEvent类中的重要方法 处理事件源发生的事件接口是: MouseListener 事件源获得监视器的方法: getX(),getY(), getPoint()  坐标位置  getModifiers(),isMetaDown() 左或右键 getClickCount() 被点击次数 处理事件源发生的事件接口是:   MouseListener 事件源获得监视器的方法:   addMouseListener

3. MouseListener接口中方法 MousePressed(MouseEvent) MouseReleased(MouseEvent) MouseEntered(MouseEvent) MouseExited(MouseEvent) Mouseclicked(MouseEvent)

addMouseListener( new MouseListener() // anonymous inner class { public void mouseClicked( MouseEvent event ) } ……….. // event handler called when a mouse button is pressed public void mousePressed( MouseEvent event ) drawJPanelMousePressed( event );

private void drawJPanelMousePressed( MouseEvent event ) { // store the location of the mouse currentPoint = event.getPoint(); if ( event.isMetaDown() ) // right mouse button is pressed drawColor = ERASE_COLOR; drawDiameter = ERASE_DIAMETER; } else // left mouse button is pressed drawColor = DRAW_COLOR; drawDiameter = DRAW_DIAMETER; repaint(); // repaint this DrawJPanel

二、鼠标移动事件(MouseMotionListener) 发生的事件:拖动鼠标、鼠标移动 鼠标事件的类型是MoseEvent 事件的接口是:   MouseMotionListener 获得监视器的方法:   addMouseMotionListener

MouseMotionListener接口中方法 mouseDragged(MouseEvent) mouseMoved(MouseEvent) addMouseMotionListener( new MouseMotionListener() // inner class { // event handler called when the mouse is dragged public void mouseDragged( MouseEvent event ) drawJPanelMouseDragged( event ); } ……….

例2:容器上的鼠标事件例 ContainerMouse 例3:组件上的鼠标事件例CompomentMouse private void drawJPanelMouseDragged( MouseEvent event ) { // store the location of the mouse currentPoint = event.getPoint(); repaint(); // repaint this DrawJPanel } 例1:鼠标事件例MouseTest 例2:容器上的鼠标事件例 ContainerMouse 例3:组件上的鼠标事件例CompomentMouse

5.5 键盘事件 1、键盘事件: 按下KEY_PRESSED 释放KEY---RELEASE 敲击KEY---keyType 2、虚拟键代码:VK_键名    例如:VK_A代表A键       VK_0代表0键 打字训练器TypingApplication.java

3、注册键盘事件 事件的接口是:   KeyListener 获得监视器的方法:   addKeyListener

outputJTextArea.addKeyListener( new KeyListener() // anonymous inner class { // event handler called when any key is pressed public void keyPressed( KeyEvent event ) outputJTextAreaKeyPressed( event ); } // event handler called when any key is released public void keyReleased( KeyEvent event ) outputJTextAreaKeyReleased( event ); } } // end anonymous inner class       ); // end ca

// get the key code for this event private void outputJTextAreaKeyPressed(              KeyEvent event ) { // get the key code for this event int buttonIndex = event.getKeyCode(); // change the color of the associated JButton changeColor( keyJButtons[ buttonIndex ] ); }  // end method outputJTextAreaKeyPressed

// reset the color of the pressed key's JButton private void outputJTextAreaKeyReleased(                KeyEvent event ) { resetColor(); }

KeyEvent常用方法 char getKeyEvent()返回键入字符 int getKeycode()返回虚拟代码 boolean isActionKey()是“动作”键,返回true.动作键如下:HOME、END、UP、F1--F12、PAUSE、ENTER……. static String getKeyModifiersText(int modifiers)返回描述修饰键的字符串

InputEvent常用方法 int getModifiers()返回一个整数,它的个位说明了SHIFT、CONTROL、ALT状态 boolean isAltdown() boolean isControlDown() boolean isMetaDown() boolean isShiftDown()

常用举例 例:下面代码用来测试SHIFT+右键是否按下 public void keyPressed(KeyEvent event) {int ketcode=event.getKeyCode(); if(keycode==keyEvent.VK_RIGHT&& event.isShiftDown()) {…….. } } 例:Sketch.java