视窗程式设计(2)讲解课件_第1页
视窗程式设计(2)讲解课件_第2页
视窗程式设计(2)讲解课件_第3页
视窗程式设计(2)讲解课件_第4页
视窗程式设计(2)讲解课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、视窗程式设计(2)讲解视窗程式设计(2)讲解大綱監聽器介面(參考Ch 10)事件轉接類別(參考Ch 10)抽象類別介面多重繼承大綱監聽器介面(參考Ch 10)3抽象類別(1/3)類別定義中,只要有一個方法(或以上)定義為抽象方法(abstract method),則該類別為抽象類別(abstract class)。抽象方法並沒有定義方法的主體(沒有實作)無法利用抽象類別建立物件。抽象類別的用處是當作父類別,讓子類別繼承。子類別必須將父類別中的抽象方法實作出來,才能建立物件。5抽象類別(1/3)類別定義中,只要有一個方法(或以上)定義4抽象類別(2/3)抽象類別的定義語法:修飾字 abstrac

2、t class 類別名稱/屬性宣告修飾字 abstract 型別 方法名稱(參數列);/其它方法定義某個類別的主體內,宣告了抽象方法,則該類別必須宣告為抽象類別。抽象類別雖然不能用以建立物件,但是可以當作物件的型別,用來宣告參照變數。抽象類別的子類別若不完全實作抽象方法,則依然是抽象類別。6抽象類別(2/3)抽象類別的定義語法:5抽象類別(3/3)使用抽象類別的用意,主要是制定固定的訊息接收管道,但不把焦點放在訊息的處理上。抽象類別和一般類別一樣,都可以定義建構子,只是不能直接以抽象類別的建構子建立物件。抽象方法的目的就是為了讓子類別實作,所以abstract 不能同時和 final、stat

3、ic 或 private 一起使用。7抽象類別(3/3)使用抽象類別的用意,主要是制定固定的訊6單一繼承 vs 多重繼承(1/2)Java的繼承是屬於單一繼承,C+的繼承是屬於多重繼承多重繼承是指:指一個類別能夠繼承多個父類別在許多時候多重繼承的性質是相當有用。在Java,多重繼承的性質交給介面。8單一繼承 vs 多重繼承(1/2)Java的繼承是屬於單一7單一繼承 vs 多重繼承(2/2)多重繼承的性質很有用,現實環境中,處處是多重繼承,想想以下情境:你有一隻手機,它有PDA和GPS的功能,有一天,ToTo跟你借GPS如果1:你怕ToTo弄壞了,他的媽媽又不會賠,這時,你可以採用單一繼承的說

4、法, “不好意思,我有行動電話”如果2:你不怕ToTo弄壞,因為他弄壞了,你就可以順理成章的成為他的小童星經紀人,好好利用他大賺一筆;則,你可以採用多重繼承的說法, “我有一隻手機,它有GPS的功能,借給你”9單一繼承 vs 多重繼承(2/2)多重繼承的性質很有用,現8介面(1/2)介面中定義的方法就像是飲料販賣機上的按鈕10介面(1/2)介面中定義的方法就像是飲料販賣機上的按鈕9介面(2/2)介面(Interface)是在類別繼承架構中定義類別行為,內含常數和方法宣告,但是並沒有實作程式碼11介面(2/2)介面(Interface)是在類別繼承架構10介面的定義與實作(1/3)定義介面的語法

5、:修飾字 interface 介面名稱 /靜態常數定義 /抽象方法宣告介面定義的例子:interface MyInterface int i=2;/已預設使用 public、final、static void m(); /已預設使用 public、abstract12介面的定義與實作(1/3)定義介面的語法:11介面的定義與實作(2/3)實作介面的類別定義語法:修飾字 class 類別名稱 implements 介面名稱/包含實作方法的敘述13介面的定義與實作(2/3)實作介面的類別定義語法:12介面的定義與實作(3/3)介面多重繼承的語法:interface 子介面 extends 父介面一

6、, 父介面二, ./新增的靜態常數及抽象方法類別實作多個介面的語法:class 類別名稱 implements 介面一, 介面二, ./類別主體敘述14介面的定義與實作(3/3)介面多重繼承的語法:13範例1:宣告與使用介面(1/4)UML類別圖,如下圖所示:15範例1:宣告與使用介面(1/4)UML類別圖,如下圖所示14範例1:宣告與使用介面(2/4)AreaInterface介面,如下所示:interface AreaInterface final double PI = 3.1415926; void area();16範例1:宣告與使用介面(2/4)AreaInterfac15範例1:

7、宣告與使用介面(3/4)接著Circle類別可以實作這個介面,如下所示:class Circle extends Shape implements AreaInterface public void area() System.out.println(X座標: + x); System.out.println(Y座標: + y); System.out.println(圓半徑: + r); System.out.println(圓面積: + PI*r*r); 17範例1:宣告與使用介面(3/4)接著Circle類別可以16範例1:宣告與使用介面(4/4)abstract class Shape

8、0601 public double x; public double y;interface AreaInterface0601 final double PI = 3.1415926; void area();class Circle0601 extends Shape0601 implements AreaInterface0601 public double r; public Circle0601(double x, double y, double r) this.x = x; this.y = y; this.r = r; public void area() System.ou

9、t.println(X座標: + x); System.out.println(Y座標: + y); System.out.println(圓半徑: + r); System.out.println(圓面積: + PI*r*r); class Ch06_01 public static void main(String args) Circle0601 c = new Circle0601(5.0, 5.0, 8.0); c.area(); System.out.println(PI常數: + AreaInterface0601.PI); System.out.println(PI常數(以物件

10、方式): + c.PI); 18範例1:宣告與使用介面(4/4)abstract claMouseListenerimport javax.swing.*; /引用Swing套件import java.awt.*;import java.awt.event.*; /引用處理事件的event套件public class MouseEX extends JFrame JButton clickME = new JButton(請按我!); /建立元件JLabel lbMouse = new JLabel(滑鼠事件訊息), /建立顯示訊息的標籤lbMouseButton = new JLabel(按

11、下按鍵);/以匿名類別的方式實作MouseListener介面, /宣告回應滑鼠事件的監聽器MouseListener mlBtn = new MouseListener() private int clickCount = 0, /記錄按鈕被按下次數的屬性 doubleClickCount = 0; /記錄按鈕被按下次數的屬性MouseListenerimport javax.swin/處理按一下滑鼠按鍵動作的方法public void mouseClicked(MouseEvent e) if(e.getClickCount() = 2)doubleClickCount+;(JButton

12、) e.getSource().setText(按下一下 : +(clickCount+) + 次 | 連按兩次 : + doubleClickCount + 次);/處理滑鼠游標進入元件的方法public void mouseEntered(MouseEvent e) (JButton) e.getSource().setText(滑鼠游標進入按鈕範圍);/處理滑鼠游標離開元件的方法public void mouseExited(MouseEvent e) (JButton) e.getSource().setText(滑鼠游標離開按鈕範圍);/處理按一下滑鼠按鍵動作的方法/處理按下滑鼠按鍵

13、動作的方法public void mousePressed(MouseEvent e)switch(e.getButton() /取得滑鼠被按下的按鍵case MouseEvent.BUTTON1 :lbMouseButton.setText(滑鼠左鍵被按下);break;case MouseEvent.BUTTON2 :lbMouseButton.setText(滑鼠中間鍵被按下);break; case MouseEvent.BUTTON3 :lbMouseButton.setText(滑鼠右鍵被按下);break;case MouseEvent.NOBUTTON :lbMouseButt

14、on.setText(沒有滑鼠按鍵被按下);break;/處理放開滑鼠按鍵動作的方法/即使不處理事件但仍須定義空的回應方法public void mouseReleased(MouseEvent e) ;/處理按下滑鼠按鍵動作的方法/以匿名類別的方式實作MouseMotionListener介面, /宣告回應滑鼠事件的監聽器MouseMotionListener mmlFrame = new MouseMotionListener()public void mouseDragged(MouseEvent e) /滑鼠拖曳lbMouse.setText(滑鼠在視窗範圍內 拖曳 , 游標位置在 (

15、 + e.getX() + , + e.getY() + );public void mouseMoved(MouseEvent e) /滑鼠移動lbMouse.setText(滑鼠在視窗範圍內 移動 , 游標位置在 ( + e.getX() + , + e.getY() + );MouseEX()Box bxBtn = new Box(BoxLayout.X_AXIS);bxBtn.add(Box.createHorizontalGlue();bxBtn.add(clickME); /加入按鈕元件bxBtn.add(Box.createHorizontalGlue();Container c

16、p = getContentPane(); /取得內容面版Box bxLabel = new Box(BoxLayout.Y_AXIS);/以匿名類別的方式實作MouseMotionListenbxLabel.add(lbMouse); /將標籤元件加入Box容器bxLabel.add(Box.createVerticalStrut(10);bxLabel.add(lbMouseButton);cp.add(bxBtn); /將包含按鈕元件的Box容器加入內容面版cp.add(bxLabel, BorderLayout.SOUTH);/將包含標籤元件的Box容器加入面版clickME.addM

17、ouseListener(mlBtn);/註冊由mlBtn監聽clickME元件的滑鼠事件addMouseMotionListener(mmlFrame);/註冊由mmlFrame監聽視窗的滑鼠移動事件setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(300, 250);setVisible(true);public static void main(String args) new MouseEX(); /產生視窗框架物件bxLabel.add(lbMouse); /將標籤元MouseAdapterimport javax.swin

18、g.*; /引用Swing套件import java.awt.*;import java.awt.event.*; /引用處理事件的event套件public class AdapterEX extends JFrameJButton clickME = new JButton(請按我!); /建立元件JLabel lbPos = new JLabel(顯示滑鼠相關訊息);MouseListener mlFrame = new MouseListener()public void mouseClicked(MouseEvent e)lbPos.setText(在 ( + e.getX() +

19、, + e.getY() + ) 按下滑鼠);public void mouseEntered(MouseEvent e)lbPos.setText(滑鼠游標進入視窗);public void mouseExited(MouseEvent e)lbPos.setText(滑鼠游標離開視窗);MouseAdapterimport javax.swing/即使不處理事件但仍須定義空的回應方法public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) ;/運用匿名內部類別, 以繼承MouseAdaptor的方式定義監聽器類別, 並完成宣告MouseAdapter maBtn = new MouseAdapter()int clickCount = 0; /記錄按鈕被按下次數的屬性public void mouseClicked(MouseEvent e)(JButton) e.getSource().setText(按鈕被按了 + (clickCount+) + 次);public void mouseEntered(MouseEvent e)(JButton) e.getSource().setText(滑鼠

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论