Java Applet 與事件處理 ShengMinMa
Outline Java Applet 的基礎 建立Java Applet AWT套件的GUI元件 Java Applet 的繪圖
Java Applet 的基礎 Applet類別是定義在java.applet套件,提供建立Java Applet所需的方法。 Java Applet的外觀就是在Panel元件上繪出的圖形,文字或GUI元件 Java Applet並不是完整的Java程式, 所以並不能在命令提示字元視窗執行, 而是需要透過Applet檢視器,或瀏覽 程式來執行Java Applet。
Java Applet 的基礎 下圖圖例在伺服端的Java Applet已經編譯成.class類別檔,HTML網頁使用<applet>標籤嵌入Java Applet類別檔。 客戶端只需瀏覽程式支援JVM,再請求伺服端擁有Java Applet的網頁時,*.class和*.html檔案都會下載到客戶端,然後在瀏覽程式執行Java Applet來顯示網頁內容。
Java Applet 的基礎 <applet>標籤 <param>標籤 <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 屬性:參數值。
建立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顯示的圖形或文字。
建立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() 當離開瀏覽程式時呼叫此方法,這各方法是用來執行最後的善後操作。
void drawRect(int,int,int,int) 建立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。
建立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
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元件。
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(“綠”);
AWT套件的GUI元件 選擇功能元件 文字輸入元件 List清單方塊元件是一各擁有捲動軸的清單。 如範例Ch16_3_1.java List list = new List(5,true); List.add(“平信”); List.add(“掛號”); List.add(“快遞”); List.add(“限時”); 如範例Ch16_3_1.java 文字輸入元件 TextField文字方塊元件允許輸入一行可捲動的文字,再建立物件十可以指定顯示寬度。 TextField text = new TextField(10);
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(“使用者名稱:”);
AWT套件的GUI元件 按鈕元件 如範例Ch16_3_2.java Button按鈕元箭是一各按鈕,使用滑鼠按一下可以產生事件。 Button button = new Button(“確定”); 如範例Ch16_3_2.java
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) 繪弧函數,弧形是存在於方形之內,同上參數說明,最後兩個則是起點角度與終點角度。
Java Applet的繪圖 在Graphics類別提供以下方法繪圖: void drawPolyline(int[],int[],int) 前兩參數陣列座標繪出多邊形,最後一個參數是共有多少點。 上述draw開頭的繪圖方法都具有對應的fill開頭的方法,可以繪出填滿色彩的圖形。並且,指定前景與背景的色彩方法如下: void setBackground(Color) 設定背景色彩,參數為Color的色彩物件。 void setForeground(Color) 設定前景色彩,參數是Color的色彩物件。 如範例Ch16_4_1.java
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”);
Java Applet的繪圖 顯示圖片: 在載入圖片成為Image物件後,就可以使用Graphics類別的drawImage()方法顯示圖片,方法說明如下。 Boolean drawImage(Image,int,int,ImageObserver) 參數Image為已經載入圖片的Image物件,第二個、第三個參數為圖片放置的座標,ImageObserver直接使用this即可。 回傳值為false:表示失敗 回傳值為true:表示成功 如範例Ch16_4_2.java
Java的委託事件處理 Java應用程式的AWT元件屬於【事件驅動】程式設計,程式碼的主要目的是【回應】或【處理】使用者的操作。 如鍵盤輸入,滑鼠按一下 什麼是事件? 事件是再執行視窗應用程式時,滑鼠或鍵盤等操作所觸發的一些動作。 動作發生時可以觸發對應的物件,當一個事件產生後,接下來可以針對事件作處理。
Java的委託事件處理 Java SDK 1.1版的事件處理是一種【委託事件處理模型】,可分為【事件來源】(Event Source)和處理事件的【傾聽者】(Listener)的物件。 其中【事件來源】可能是 Component物件的滑鼠,滑鼠移動和鍵盤事件。 或是AWT物件產生的事件。 事件產生時,傾聽者接受事件然後進行處理,傾聽者是一個【委託處理指定事件】的物件。 Java語言是使用【介面】建立【委託事件處理模型】,傾聽者物件只要【實作】一些標準介面的類別物件。
Java的委託事件處理 如果沒有傾聽者物件委託處理此事件,當事件發生時,並不會發生任何事。 事件處理就是執行【介面的方法】 AWTEvent事件:【Java事件的來源物件】產生的事件就是一個物件,這些【事件物件】都屬於AWTEvent的子類別。其中分為兩種: 低階事件:一些基本輸入和視窗操作等相關物件。 語意事件:使用者與GUI元件互動遭作所產生的相關事件。
Java的委託事件處理 低階事件: ComponentEvent:當隱藏、移動、顯示和調整元件尺寸時。 ContainerEvent:新增或刪除元件時。 FocusEvent:元件取得或失去焦點時,當使用TAB鍵和滑鼠按鍵按一下該物件,就可以取得焦點。 KeyEvent:當鍵盤按鍵按下、鬆開和輸入字元時。 MouseEvent:滑鼠在元件上按一下,拖拉、移動、進入、離開、按下、鬆開。 WindowEvent:視窗操作的開啟、關閉、縮小圖示化等操作。 PaintEvent:相關的繪圖操作。 InputEvent:這是KeyEvent與MouseEvent的父抽象類別。
Java的委託事件處理 語意事件: ActionEvent :當按下按鈕,選擇清單方塊選項,數入文字方塊時按下Enter AdjustmentEvent:當移動捲動軸物件時。 ItemEvent:當選取核取方塊、選擇紐、下拉式清單方塊時。 TextEvent:輸入的文字內容改變時。
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
Java Applet與事件處理 滑鼠拖拉處理事件: Component(class)->MouseEvent->MouseMotionListener->mouseDragged (Method) or mouseMoved->Java Apple實作介面。 其中方法的參數為MouseEvent。 取得滑鼠座標的方法是繼承MouseEvent的物件方法。 Int getX() 取得座標x Int getY() 取得座標y 程式範例Ch16_6_2.java
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
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
Java Applet與事件處理 另外還有其他【語意事件】,TextField及TextArea。 TextField,TextArea(class)->TextEvent->TextListener->textValueChanged(Method)->Java Applet實作此介面。 其中方法的參視為TextEvent。 在處理字串變更時,可以使用getText方法取得使用者輸入的資料。 程式範例Ch16_6_5.java
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
Finish !!! Thank you