Ch04 事件處理 物件導向系統實務.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第1章 Java语言概述.
Java 2实用教程(第3版)教学课件 主讲教师:张国平
JAVA程序设计 天津工程职业技术学院计算机工程系软件技术教研室.
Java程序设计教程 第一讲 Java概述.
P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞.
Java程序设计 常州信息职业技术学院(CCIT) 软件学院
四資二甲 第三週作業 物件導向程式設計.
Java System Concepts and Animation Programming
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
第12章 JDBC数据库应用程序设计.
第二十章 圖型介面與網路對播 (GUI and Intercross Transition) 20-1 簡介 20-2 ActionListener Interface 20-3 ActionEvent Class 20-4 Vector Class 20-5 圖型介面與視窗關閉 20-6 圖型介面與資料顯示.
視窗程式設計 2. 視窗版面配置 Chih Hung Wang Reference:
6.5 图形界面的布局设计 每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。
第11章 Java多媒体技术.
第七章 图形用户界面的设计与实现 学习导读 首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置、在窗口中显示文字和图像等;
第6章 图形用户界面设计 6.1 图形用户界面概述 6.2 GUI标准组件的使用 6.3 Java的事件处理 6.4 窗口及菜单设计
第 18 章 圖形使用者介面.
第三部分 Java语言编程应用篇 第6章 Java语言的 图形用户界面开发技术 (之二).
Ch07 介面與多重繼承 物件導向程式設計(II).
Java语言程序设计 马 皓
Ch06 人機介面_視窗程式設計(2) 物件導向系統分析與設計.
第9章 图形用户界面(GUI)设计.
Ch02 視窗Swing套件 物件導向系統實務.
Java语言程序设计-图形用户界面设计(2)
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
GUI事件处理 主讲:赖国荣 QQ:
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
2018/11/15 面向对象与多线程综合实验-GUI设计 教师:段鹏飞.
Ch07 Java Applets 物件導向系統實務.
Java程序设计 JAVA 授课教师:赵小敏 浙江工业大学 软件学院
Chapter 9 設計的精細製作: 行動計算 Software Engineering – An Engineering Approach, James F. Peters & Witold Pedrycz.
SWING 2018/11/23.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
电子商务技术基础 张宝明.
程式設計實作.
CH09 套件 物件導向程式設計(II).
記事本 物件導向系統實務.
第九章 窗口、菜单和对话框 本章的任务: 介绍图形用户界面的高级组件。这些组件包括窗口、菜单和对话框等,它们可以构造出标准GUI应用程序。最后,简要介绍Java Swing的使用方法。
記事本 物件導向系統實務.
JAVA 2 新觀念教本 ---邁向SCJP專業認證--- 易瓏資訊 林新德 著.
Java语言程序设计 第八部分 Applet小程序.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
AWT Event Model.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
CH03 為自己的視窗加上小元件 物件導向系統實務.
P2P文件共享系统 制作人:李洁顺 指导教师:杨淑萍 张 霞.
CH04 視窗中元件排排坐 物件導向系統實務.
C/C++/Java 哪些值不是头等程序对象
事件處理.
Multithread 多執行緒 以GUI為例了解物件以及Event
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第五章 事件处理机制 Java 事件处理机制 窗口事件 鼠标事件 键盘事件 例:ButtonTest.java.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java基本语法 讲师:复凡.
第十二章 JFC/Swing 概述  Swing组件  Swing应用程序结构  JComponent类.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
Applet.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基本语法 讲师:复凡.
组件 组件是构成图形用户界面的各种元素。通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件分为容器(Container)类和非容器类组件两大类。 控制组件有Button按钮 、Checkbox复选矿、 Choice下拉列表、Label标签、List列表、textcomponent文本(TextField文本域.
Summary
Presentation transcript:

Ch04 事件處理 物件導向系統實務

事件(1/2) 事件(event)其實是就是一種物件。 元件透過傳送事件物件(event object)的方式,傳達使用者按下滑鼠按鈕或鍵盤按鍵等事件。 GUI元件必須對鍵盤、滑鼠等動作有所反應 在Java中,按下鍵盤某個鍵或移動滑鼠,都是事件的觸發 2019/1/12

事件(2/2) 欲讓事件能順利由來源元件傳送給傾聽者處理,必須將傾聽者指定給元件(相當於一種註冊動作)。 事件本身就存在特定的事件資訊,接收事件的傾聽者可以由事件的資訊進行處理。 AWT元件可以使用的事件和傾聽者都包含在java.awt.event套件裡。 2019/1/12

傾聽者 每個傾聽者都必須實作傾聽者介面或是繼承自轉接者(Adapter)。 轉接者為實作傾聽者介面的類別,其定義的傾聽者方法都是空方法,不對事件作任何處理。 傾聽者方法都是以 void定義,參數為事件,不回傳任何值。 傾聽者介面都以Listener為識別字尾,而轉接者都以Adapter為識別字尾 2019/1/12

 事件與傾聽者間的關係(1/2) [按鈕1]若未委任 一個MouseListener 物件,以滑鼠敲擊 [按鈕1],只會看到 它被敲擊,但不會 有其他回應 事件:敲擊滑鼠按鍵 (mouseClick)  按鈕1 2019/1/12

  事件與傾聽者間的關係(2/2) 屬java.awt.event.* 的mouseListener介面,介面中定義了mouseClick, mousePress…等方法 [按鈕1]委任一個 MouseListener 物件,以接收並回 應mouseClick 事件源 事件:敲擊滑鼠按鍵 (mouseClick)  屬java.awt.*的Button內的方法 addMouseListener(…) 按鈕1 接收及回應 mouseClick  MouseListener物件 委任一個 2019/1/12

委託事件處理模型 Java SDK 1.1版的事件處理是一種「委託事件處理模型」(Delegation Event Model),分為「事件來源」(Event Source)和處理事件的「傾聽者」(Listener)物件,如下圖所示:

AWTEvent事件-說明 在Java事件來源物件產生的事件就是一個物件,這些事件物件都屬於AWTEvent的子類別,AWTEvent事件可以分為「低階事件」(Low-level Events)和「語意事件」(Semantic Events)兩種。

AWTEvent事件-低階事件(Low-level Events) 低階事件是一些基本輸入和視窗操作等相關的事件,如下表所示:

AWTEvent事件-語意事件(Semantic Events) 語意事件是指使用者與GUI元件互動操作所產生的相關事件,如下表所示:

事件來源-低階事件 「事件來源」(Event Source)是指哪一個物件產生此事件,首先是低階事件的來源類別,如下表所示:

事件來源-語意事件 語意事件的來源類別,如下表所示:

事件傾聽者-說明 當事件來源類別產生AWT事件後,Java程式需要委託類別處理此事件,也就是將類別指定成傾聽者,其相關方法,如下表所示:

事件傾聽者-傾聽者介面1 一旦類別新增為傾聽者,該類別需要實作傾聽者介面的所有方法,如下表所示:

事件傾聽者-傾聽者介面2

事件傾聽者-程式架構 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.*; public class Ch16_6_2 extends Applet implements MouseListener { public void paint(Graphics g) { ……… } public void init() { addMouseListener(this); } // 事件處理方法 public void mouseClicked(MouseEvent evt){ } public void mouseEntered(MouseEvent evt){ } public void mouseExited(MouseEvent evt){ } public void mousePressed(MouseEvent evt){ } public void mouseReleased(MouseEvent evt){ } }

實作Listener介面的作法 設計[滑鼠敲擊]事件的三個步驟: (假設有一個Buttom元件B1) 加入所需的傾聽能力   B1.addMouseListener(MouseListener l) 自訂一個實作XXXListener的類別 class myMouseListener(MouseListener l) { public void mouseClicked(MouseEvent e) { } 產生XXXListener物件實體 將步驟1中,改成   B1.addMouseListener(new myMouseListener()) 2019/1/12

範例1:按幾次按鈕(1/3) import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Ch05_01 extends JFrame implements ActionListener { private static String labelString = "按鈕按幾次: "; private int num = 0; private JLabel label; //建構子, 設定初始視窗的元件 public Ch05_01() super("Swing應用程式範例 "); //視窗標題文字 Container c = getContentPane(); //取得ContentPane c.setLayout(new FlowLayout()); //版面配置 label = new JLabel(labelString + num); //設定框線 label.setBorder(BorderFactory.createLineBorder(Color.blue)); JButton button = new JButton("按一下(Alt_K)"); //設定快速鍵Alt_K button.setMnemonic(KeyEvent.VK_K); //新增事件處理 button.addActionListener(this); //設定JPanel物件 JPanel jpane = new JPanel(); //設定框線 jpane.setBorder(BorderFactory.createLineBorder(Color.yellow)); //將lable元件新增到jpane上 jpane.add(label); //將button元件新增到jpane上 jpane.add(button); //將jpane新增到c上 c.add(jpane); } //實作事件處理方法 public void actionPerformed(ActionEvent evt) { num++; label.setText(labelString + num); //重設文字內容

範例1:按幾次按鈕(2/3) public static void main(String [] args) { //建立Swing應用程式的物件 Ch05_01 app = new Ch05_01(); //關閉視窗事件,結束程式的執行 app.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent evt) System.exit(0); } } ); app.setSize(300, 100); app.setVisible(true); class myWindowListener implements WindowListener { public void windowActivated(WindowEvent evt){} public void windowClosed(WindowEvent evt){} public void windowDeactivated(WindowEvent evt){} public void windowDeiconified(WindowEvent evt){} public void windowOpened(WindowEvent evt){} public void windowIconified(WindowEvent evt){} public void windowClosing(WindowEvent evt) { System.exit(0); }

事件改編者Event Adapter-說明 在AWT的java.awt.event套件提供XXXAdapter改編者類別,如下表所示: 2019/1/12 20 20

事件改編者Event Adapter-範例 當元件新增事件後,需在傾聽者類別實作所有介面方法,但是我們只會使用到其中幾個方法。 例如:在主程式main()使用WindowListener事件傾聽者,這個介面一共有7個方法,但是我們只實作windowClosing()一個方法,如下所示: app.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); 2019/1/12 21 21

動動手時間(1) 將範例1的程式自己輸入一次, 並且編譯及執行

事件的傳送 元件加入傾聽者是使用add???Listener()方法,???表示某種型態的事件。 元件解除和傾聽者之間的關係,不再將發生的事件傳給傾聽者,使用remove???Listener()方法。 一個事件來源可以將事件傳送給多個傾聽者,而多個不同來源的事件也可以傳送給單一個傾聽者。 2019/1/12

傾聽者的介面 容器的傾聽者介面 所有容器的傾聽者介面 傾聽者方法 ContainerListener componentAdded() componentRemoved() 2019/1/12

所有元件的傾聽者介面 傾聽者方法 ComponentListener componentResized() componentMoved() componentShown() componentHidden() FocusListener focusGained() focusLost() KeyListener keyTyped() keyPressed() keyRelease() MouseListener mouseClicked() mousePressed() mouseReleased() mouseEntered() mouseExited() MouseMotionListener (與MouseListener傾聽相同的事件MouseEvent) mouseDragged() mouseMoved 2019/1/12

adjustmentValueChanged() ScrollBar 傾聽者介面 傾聽者方法 事件來源元件 ActionListener actionPerformed() Button List TextField AdjustmentListener adjustmentValueChanged() ScrollBar ItemListener itemStateChanged() CheckBox Choice TextListener textValueChanged () TextArea WindowListener windowActivated() windowClosed() windowClosing() windowDeactivated() windowDeiconified() windowIconified() windowOpened() Frame Dialog 2019/1/12