170 likes | 275 Views
Event-Driver Intput. AWT( 視窗物件 ). 大綱. 視窗物件 事件 Event 練習. 視窗物件. 視窗物件 AWT(Abstract Windowing Toolkit) 類別 用來處理圖形 ( 包含視窗與繪圖 ) 最基本的方式,它可以用來建立 Java 的 applet 及視窗程式。 本章節以此 AWT 介紹. AWT 視窗物件. 建立視窗 Frame 物件 可以當成是一個容器,用來容納其它視窗物件,如按鈕、標籤等等。 語法 Frame() // 建立一個沒有標題的視窗
E N D
Event-Driver Intput AWT(視窗物件)
大綱 • 視窗物件 • 事件Event • 練習
視窗物件 • 視窗物件 • AWT(Abstract Windowing Toolkit)類別 • 用來處理圖形(包含視窗與繪圖)最基本的方式,它可以用來建立Java的applet及視窗程式。 • 本章節以此AWT介紹
AWT視窗物件 • 建立視窗 • Frame物件 • 可以當成是一個容器,用來容納其它視窗物件,如按鈕、標籤等等。 • 語法 • Frame() //建立一個沒有標題的視窗 • Frame(String title) //建立視窗,並以title為其標題 • 整體寫法 • 呼叫 import java.awt.*; • 宣告 static Frame greetDisplay; • 建立 greetDisplay=new Frame(“frame class”); • Method方法 • getState:設定視窗的狀態,Frame.Normal代表一般狀態,其值為0、Frame.ICONIFIED代表視窗為最小化,其值為1。 • getTitle()取得視窗的標題。
練習一 //建立視窗物件 import java.awt.*; public class test1 { static Frame frm=new Frame("Frame class"); public static void main(String agrs[]) { frm.setSize(200,150); //設定視窗大小為200*150 frm.setLocation(100,50); //設定視窗位置在(100,50) frm.setVisible(true); //設定視窗為可見 System.out.println("state="+frm.getState()); System.out.println("title="+frm.getTitle()); System.out.println("visible="+frm.isVisible()); } }
建立標籤 • Label物件 • Label是用來在視窗中顯示文字的文字方塊 • 語法 • Label() //建立一個沒有文字的標籤 • Label(String text) //建立標籤,並以text為標籤上的文字 • Label(String text, int align) //建立標籤,以text為標籤上的文字,並以align的方式對齊,其中align的值可為Label.LEFT、Label.RIGHT、Label.CENTER • 整體寫法 • 呼叫 import java.awt.*; • 宣告 private static Label myDataLabel; • 建立 myDataLabel=new Label(“Enter data here:”); 說明: 宣告一個Label類別的物件(myDataLabel),其中static修飾元表示該欄位是一個類別欄位,若無static修飾元,則為實體欄位。 說明: 在畫面上顯示”Enter data here”來當做提示字元 New用來取得一個類別的物件
Method方法 • getAlignment()傳回標籤內文字方對齊方式。 • setAlignment(int align)設定標籤內文字的對齊方式。 • getText()傳回標籤內的文字。 • setText(String text)設定籤內的文字為text
練習二 //指定標籤物件的大小 import java.awt.*; public class test2 { static Frame frm=new Frame("Label class"); static Label lab=new Label(); public static void main(String agrs[]) { frm.setLayout(null); //取消版面配置 frm.setSize(200,150); //設定視窗大小為200*150 frm.setBackground(Color.pink); lab.setText("Hello Java"); lab.setAlignment(Label.CENTER); lab.setForeground(Color.blue); lab.setLocation(60,50); //設定標籤位置 lab.setSize(120,20); //設定標籤大小 lab.setFont(new Font("Serief",Font.ITALIC+Font.BOLD,18)); frm.add(lab); frm.setVisible(true); }}
建立文字欄 • TextField物件 • TextField是讓使用者輸入資料的視窗元件 • 整體寫法 • 呼叫 import java.awt.*; • 宣告 private static TextField myDF; • 建立 myDF=new TextField(“Replace me”,10); • Method方法 • getEchoChar()取得文字方塊的回應字元。 • setEchoChar(char c)設定文字方塊的回應字元為c,通常使用在password上。 • setText(String text)設定文字方塊的文字為text。 說明:宣告一個TextField類別的物件(myDFl),其中static修飾元表示該欄位是一個類別欄位,若無static修飾元,則為實體欄位。 說明:”Replace me”為提示字元,會顯示在文字欄中。 new用來取得一個類別的物件或為TextField類別建一個新的但未初始化的實體。
建立按鈕 • Button物件 • Button是用來處理按鈕物件的相關事宜 • 語法 • Button() //建立一個沒有標題的按鈕 • Button(String title) //建立標題為title的按鈕 • 整體寫法 • 呼叫 import java.awt.*; • 宣告 Button myB; • 建立 myB=new Button(“Done”); • Method方法 • getLabel傳回按鈕的標題。 • setLabel(String title)設定按鈕的標題為title。
事件 • 事件是由事件來源所產生的,我們可以針對事件本身來登錄監聽器(Listener)以監聽事件的發生,這種方式可以讓程式設計師來指派負責處理事件的對象。 • Java的事件處理是採取「委派事件模式(delegation event model)」。 • 委派事件模式:當事件發生時,產生事件的物件(事件的來源者event source,如按鈕),會把此一「訊息」轉給事件監聽者(event listener)處理的一種方式。 • WindowListener:監聽器(Listener)介面 • WindowAdapter:轉接器(Adapter)類別 • windowClosing():方法
撰寫listener class Private static class MyListener implements ActionListener { Public void actionPerformed(ActionEvent event) { ……. } } 說明: actionPerformed方法:當使用者按一下按鈕,則會執行{…}內的敘述。 implements ActionListener:表示MyListener開始啟動 MyListener:類別名稱
②按下按鈕,btn會產生一個事件物件 ①frm先向按鈕btn註冊 按鈕btn (event source) 事件傾聽者frm (event listener) ③將事件物件傳遞給frm ④指派給事件處理者 事件處理者 public void actionPerformed(ActionEvent e) { Frm.setBackground(Color.yellow); }
宣告MyListener listener; • 建立 listener=new MyListener(); • 根據按鈕登錄監視器以監視事件發生 btn.addActionListener(listener); 說明: 宣告一個MyListener類別物件(listener)。 說明: new用來取得一個類別的物件或為MyListener類別建一個新的但未初始化的實體。
Click Me 練習三 //按鈕+事件處理 import java.awt.*; import java.awt.event.*; public class test3 extends Frame implements ActionListener //設test3 class繼承自Frame //將 test3 class實作成ActionListener介面 { static test3 frm=new test3(); //建立test3 class的物件frm static Button btn=new Button("Click Me"); public static void main(String args[]) { btn.addActionListener(frm); //把frm(傾聽者)向btn(事件來源者)註冊 frm.setLayout(new FlowLayout()); frm.setTitle("Action Event"); frm.setSize(200,150); frm.add(btn); frm.setVisible(true); } public void actionPerformed(ActionEvent e) //事件發生的處理動作 { frm.setBackground(Color.yellow); }}