Java Applet的執行過程

Download Report

Transcript Java Applet的執行過程

Java Applet 與事件處理
ShengMinMa
1
Outline







Java Applet 的基礎
建立Java Applet
AWT套件的GUI元件
Java Applet 的繪圖
Java的委託事件處理
Java Applet 與事件處理
Java Applet的音樂撥放
2
Java Applet 的基礎



Applet類別是定義在java.applet套件,提供建立Java Applet所
需的方法。
Java Applet的外觀就是在Panel元件上繪出的圖形,文字或GUI
元件
Java Applet並不是完整的Java程式,
所以並不能在命令提示字元視窗執行,
而是需要透過Applet檢視器,或瀏覽
程式來執行Java Applet。
3
Java Applet 的基礎

下圖圖例在伺服端的Java Applet已經編譯成.class類別檔,
HTML網頁使用<applet>標籤嵌入Java Applet類別檔。

客戶端只需瀏覽程式支援JVM,再請求伺服端擁有Java Applet
的網頁時,*.class和*.html檔案都會下載到客戶端,然後在瀏覽
程式執行Java Applet來顯示網頁內容。
4
Java Applet 的基礎

<applet>標籤
– <applet>標籤可以將Java Applet嵌入網頁
– 基本語法:
• <applet code=“class_name” width=value height=value> … </applet>
– 說明:
• Code 屬性:Java applet 的類別檔案名稱。
• Width 屬性:Java applet尺寸的寬。
• Height 屬性 : Java applet尺寸的高。

<param>標籤
– <param>標籤是用來傳遞參數給Java Applet
– 基本語法:
• <param name=“para_name” value=value>
– 說明:
• Name 屬性:參數名稱。
• Value 屬性:參數值。
5
建立Java Applet

Java Applet 程式是繼承自Applet類別,然後實作或覆寫Applet
的方法,這個新類別就是Java Applet程式。

在Java Applet程式的開頭匯入Applet和Graphics套件,類別實
作paint()方法,及drawString方法。
範例Ch16_2_1.java

方法
說明
Void
drawString(String,int,int)
顯示參數String字串的內容,後面兩個參數分別是位
置座標x和y的值。
Void paint(Graphics)
Applet的顯示方法,繼承自Container類別方法,可
以Panel物件上繪出Java Applet顯示的圖形或文字。
6
建立Java Applet

Java Applet的執行過程:下表四個方法是瀏覽程式或Applet檢
視器執行Java Applet的初始,開始,停止和善後的四個過程。
方法
說明
Void init()
當瀏覽程式或Applet檢視器載入和建立Java Applet時,呼叫此方
法。
Void start()
開始Java Applet的執行,當載入Applet或是使用者進入一頁內含
applet的網頁時,呼叫此方法
Void stop()
停止Java Applet的執行,當使用者離開包含Applet的網頁或結束
瀏覽程式的執行時,呼叫此方法。
Void destroy()
當離開瀏覽程式時呼叫此方法,這各方法是用來執行最後的善後操
作。
7
建立Java Applet

Java Applet可以使用repaint()方法重繪Java Applet,也可使用繼
承自Component類別的getSize()方法取得Java Applet的尺寸。
– 如:
• recWidth=getSize().width; 或 recWidth=getWidth();
• recHeight=getsize().Height 或 recHeight=getHeight();

Graphics的繪圖方法: (範例Ch16_2_2.java)
方法
說明
void drawRect(int,int,int,int) 繪出長方形,前兩個int參數是左上角座標(x,y),後兩個分別為
長方形的寬和高
void repaint()
重新繪出容器元件的圖形,以本章為例,就是重繪Java Applet。
8
建立Java Applet


將參數傳遞給Java Applet:
在HTML文件可以使用<param>標籤傳遞參數給Java Applet,如果
<applet>標籤擁有<param>標籤,在Java Applet是使用
getParameter()方法取得傳如參數。
– Inc = Integer.parseInt(getParameter(“INC”));
– Offset = Integer.parseInt(getParameter(“OFFSET”));

繪出具色彩的圖形:
– void setColor(Color):設定目前使用的色彩,參數是Color的色彩物件。
– void fillRect(int,int,int,int):繪出一個填滿色彩的長方形,前兩個int參
數是左上角座標(x,y),後兩各分別為長方形的寬和高。
– 常用色彩物件常數:Color.white Color.black Color.red Color.green
Color.blue Color.yellow Color.lightGray

範例:Ch16_2_3.java
9
AWT套件的GUI元件

Java API類別函式庫【AWT】(Abstract Window Toolkit)提供基本的
GUI圖形介面的元件。

在Panel物件新增GUI元件是使用繼承自Container類別方法,如下所示:
– void add(Component):新增GUI元件到Java Applet,參數是GUI元件。
– void remove(Component):從Java Applet移除GUI元件,參數是GUI元
件。

AWT提供選擇功能的元件有:Checkbox,CheckboxGroup,Choice,
和List元件。

AWT提供文字輸入功能的元件有:TextField和TextArea元件,其他常
用元件還有【文字說明】的Label和【按鈕】的Button元件。
10
AWT套件的GUI元件

選擇功能元件
– Checkbox元件是核取方塊,按一下可以更改狀態值。
• Checkbox checkBox = new Checkbox(“是否顯示”,true);
– CheckboxGroup元件是選擇紐,一組選擇紐,只能有一個為True。
• CheckboxGroup group = new CheckboxGroup();
• Checkbox red = new Checkbox(“紅” , group , true);
• Checkbox blue = new Checkbox(“藍”,group , false);
– Choice是下拉式清單元件,只顯示一個項目。
•
•
•
•
Choice color = new Choice();
color.add(“紅”);
color.add(“藍”);
color.add(“綠”);
11
AWT套件的GUI元件

選擇功能元件
– List清單方塊元件是一各擁有捲動軸的清單。
•
•
•
•
•
List list = new List(5,true);
List.add(“平信”);
List.add(“掛號”);
List.add(“快遞”);
List.add(“限時”);
– 如範例Ch16_3_1.java

文字輸入元件
– TextField文字方塊元件允許輸入一行可捲動的文字,再建立物件十
可以指定顯示寬度。
• TextField text = new TextField(10);
12
AWT套件的GUI元件

文字輸入元件
– TextArea文字區域元件能夠輸入多行文字內容,再建立物件時,可
以指定寬和高。
• TextArea area = new
TextArea(“”,10,30,TextArea.SCROLLBARS_HORIZONTAL_ONLY);
– 最後一個參數指定文字區域顯示的捲動軸,相關常數如下:
•
•
•
•

SCROLLBARS_NONE:沒有捲動軸
SCROLLBARS_HORIZONTAL_ONLY:只有水平捲動軸
SCROLLBARS_VERTICAL_ONLY:只有垂直捲動軸
SCROLLBARS_BOTH:擁有水平及垂直捲動軸
文字說明元件
– Label標籤元件是在GUI介面上顯示文字內容。
• Label label = new Label(“使用者名稱:”);
13
AWT套件的GUI元件

按鈕元件
– Button按鈕元箭是一各按鈕,使用滑鼠按一下可以產生事件。
• Button button = new Button(“確定”);

如範例Ch16_3_2.java
14
Java Applet的繪圖


Java Applet除了可以新增AWT的GUI元件外,我們還可以在
Java Applet上繪圖、載入和顯示現成的圖片檔案。
在Graphics類別提供以下方法繪圖:
– void drawLine(int,int,int,int)
• 繪線函數,分別為起點(x,y)與終點(x1,y1)
– void draw3DRect(int,int,int,int,boolean)
• 繪方形凹凸面函數,分別為起點(x,y)與終點(x1,y1),true為凹。
– void drawRoundRect(int,int,int,int,int,int)
• 繪圓角方形函數,分別為起點(x,y)與終點(x1,y1),圓角弧度的水平及垂
直尺寸。
– void drawOval(int,int,int,int)
• 繪圓函數,圓形是存在於方形之內,分別為左上角座標及寬和高。
– void drawArc(int,int,int,int,int,int)
• 繪弧函數,弧形是存在於方形之內,同上參數說明,最後兩個則是起點
角度與終點角度。
15
Java Applet的繪圖

在Graphics類別提供以下方法繪圖:
– void drawPolyline(int[],int[],int)
• 前兩參數陣列座標繪出多邊形,最後一個參數是共有多少點。

上述draw開頭的繪圖方法都具有對應的fill開頭的方法,可以繪出
填滿色彩的圖形。並且,指定前景與背景的色彩方法如下:
– void setBackground(Color)
• 設定背景色彩,參數為Color的色彩物件。
– void setForeground(Color)
• 設定前景色彩,參數是Color的色彩物件。

如範例Ch16_4_1.java
16
Java Applet的繪圖

Java Applet的圖片載入
– Java Applet不只可以當成畫布來繪圖,亦可以用現成的圖片來作載
入並且顯示。

載入圖片:
– Image getImage(URL)
• URL參數為一物件,並且回傳至Image物件。
• URL為一物件,可用其建購子傳入網址
– getImage(new URL(www.kuas.edu.tw/~smma/abc.gif));
– Image getImage(URL,String)
• 如果圖檔和網頁檔案是儲存在同一個路徑,則在URL物件上填入
【getDocumentBase()】或【getCodeBase()】的函數回傳的物件作為
URL物件。
– Image image = getImage(getDocumentBase(),”abc.gif”);
17
Java Applet的繪圖

顯示圖片: 在載入圖片成為Image物件後,就可以使用Graphics
類別的drawImage()方法顯示圖片,方法說明如下。
– Boolean drawImage(Image,int,int,ImageObserver)
• 參數Image為已經載入圖片的Image物件,第二個、第三個參數為圖片
放置的座標,ImageObserver直接使用this即可。
• 回傳值為false:表示失敗 回傳值為true:表示成功

如範例Ch16_4_2.java
18
Java的委託事件處理

Java應用程式的AWT元件屬於【事件驅動】程式設計,程式碼的
主要目的是【回應】或【處理】使用者的操作。
– 如鍵盤輸入,滑鼠按一下

什麼是事件?
– 事件是再執行視窗應用程式時,滑鼠或鍵盤等操作所觸發的一些動
作。
– 動作發生時可以觸發對應的物件,當一個事件產生後,接下來可以
針對事件作處理。
19
Java的委託事件處理


Java SDK 1.1版的事件處理是一種【委託事件處理模型】,可分為
【事件來源】(Event Source)和處理事件的【傾聽者】(Listener)的
物件。
其中【事件來源】可能是
– Component物件的滑鼠,滑鼠移動和鍵盤事件。
– 或是AWT物件產生的事件。


事件產生時,傾聽者接受事件然後進行處理,傾聽者是一個【委託處
理指定事件】的物件。
Java語言是使用【介面】建立【委託事件處理模型】,傾聽者物件只
要【實作】一些標準介面的類別物件。
20
Java的委託事件處理

如果沒有傾聽者物件委託處理此事件,當事件發生時,並不會發
生任何事。

事件處理就是執行【介面的方法】

AWTEvent事件:【Java事件的來源物件】產生的事件就是一個
物件,這些【事件物件】都屬於AWTEvent的子類別。其中分為
兩種:
– 低階事件:一些基本輸入和視窗操作等相關物件。
– 語意事件:使用者與GUI元件互動遭作所產生的相關事件。
21
Java的委託事件處理

低階事件:
– ComponentEvent:當隱藏、移動、顯示和調整元件尺寸時。
– ContainerEvent:新增或刪除元件時。
– FocusEvent:元件取得或失去焦點時,當使用TAB鍵和滑鼠按鍵按
一下該物件,就可以取得焦點。
– KeyEvent:當鍵盤按鍵按下、鬆開和輸入字元時。
– MouseEvent:滑鼠在元件上按一下,拖拉、移動、進入、離開、按
下、鬆開。
– WindowEvent:視窗操作的開啟、關閉、縮小圖示化等操作。
– PaintEvent:相關的繪圖操作。
– InputEvent:這是KeyEvent與MouseEvent的父抽象類別。
22
Java的委託事件處理

語意事件:
– ActionEvent :當按下按鈕,選擇清單方塊選項,數入文字方塊時
按下Enter
– AdjustmentEvent:當移動捲動軸物件時。
– ItemEvent:當選取核取方塊、選擇紐、下拉式清單方塊時。
– TextEvent:輸入的文字內容改變時。
23
Java Applet與事件處理

Java Applet的GUI圖形介面可以新增【事件處理】,以便隨時準備處理
各種事件。如 Mouse , Keyboard 和AWT所產生的事件。

滑鼠處理事件:
– Component(class)->MouseEvent->MouseListenerner>mouseClick(Method) or mousePressed or mouseReleased or
mouseEntered or mouseExited ->Java Apple實作介面。
– 其中方法的參數為MouseEvent。
– 程式範例Ch16_6_1.java
24
Java Applet與事件處理

滑鼠拖拉處理事件:
– Component(class)->MouseEvent->MouseMotionListener>mouseDragged (Method) or mouseMoved->Java Apple實作介
面。
– 其中方法的參數為MouseEvent。
– 取得滑鼠座標的方法是繼承MouseEvent的物件方法。
• Int getX() 取得座標x
• Int getY() 取得座標y
– 程式範例Ch16_6_2.java
25
Java Applet與事件處理

鍵盤事件處理:
– Component(class)->KeyEvent->KeyListener>keyPressed(method) or keyReleased or keyTyped->Java
Applet實作介面。
– 其中方法的參數為KeyEvent。
– 取得鍵盤鍵入的值的方法是繼承KeyEvent的物件方法。
• Int getKeyCode() 取得鍵值。
– KeyEvent類別定義按鍵的的常數,常用的方向鍵如下。
•
•
•
•
KeyEvent.VK_LEFT 方向鍵向左
KeyEvent.VK_REGHT 方向鍵向右
KeyEvent.VK_UP 方向鍵向上
KeyEvent.VK_DOWN 方向鍵向下
– 程式範例Ch16_6_3
26
Java Applet與事件處理

AWT的GUI元件產生的事件屬於【語意事件】,如List,Choice
和Button元件所產生的事件。
– Button,List,TextField,MenuItem(Class)>ActionEvent0>ActionListener->actionPerformed(Method)>Java Applet實作介面。
– Choice,Checkbox,List,CheckMenuItem(class)->ItemEvent>ItemListener->itemStateChanged(Method)->Java Applet實作介
面。
– 其中方法的參數分別為ActionEvent,ItemEvent。
– 因為actionPerformed方法可以同時處理【Botton】及【List】元件
所產生的事件,所以需要getSource方法來取得【觸發事件】的【來
源物件】
– 程式範例Ch16_6_4.java
27
Java Applet與事件處理

另外還有其他【語意事件】,TextField及TextArea。
– TextField,TextArea(class)->TextEvent->TextListener>textValueChanged(Method)->Java Applet實作此介面。
– 其中方法的參視為TextEvent。
– 在處理字串變更時,可以使用getText方法取得使用者輸入的資料。
– 程式範例Ch16_6_5.java
28
Java Applet的音樂撥放



Java Applet不只可以顯示圖片,程式也可以撥放音樂。
目前支援的檔案格式有 au , aiff , wav , mid 及 rmf 。
在Applet類別中提供getAudioClip方法可以建立AudioClip物件來
載入音樂檔案。
– AudioClip audio = getAudioClip(detDocumentBase(),”abc.wav”)

在建立AudioClip物件,可以使用AudioClip介面的方法控制音樂
的撥放。
– void play() :撥放音樂
– void loop() :重複撥放音樂
– void stop():停止撥放音樂

程式範例Ch16_7.java
29
Finish !!! Thank you
30
31
32