Download presentation
Presentation is loading. Please wait.
1
精彩 Java 2 程式設計 C2 物件與事件控制技巧
2
2 目錄 C2-1 認識事件 C2-1 認識事件 C2-2 以時間事件來控制物件 C2-2 以時間事件來控制物件 C2-3 滑鼠控制技巧 C2-3 滑鼠控制技巧 C2-4 鍵盤控制技巧 C2-4 鍵盤控制技巧
3
3 C2-1 認識事件 改寫視窗程式的架構 事件與事件傾聽者 事件類別 事件傾聽者 視窗事件
4
4 改寫視窗程式的架構: 在開始介紹事件的觀念之前,希望能先引導 讀者改變程式的架構(因為這一章之前的程 式碼架構,與這一章之後的程式架構不一 樣)。
5
5 在 main() 程式中建立一個 frame 物件,然後設定 frame 物件屬性的程式碼如下: 若將新撰寫的程式類別繼承 JFrame ,而在 main() 視窗中使用所建立的 程式類別來建立程式物件,則這個物件便具有 JFrame 的特性,因此在 程式中,就可以直接使用繼承自 JFrame 的方法和屬性,或者實作介面。
6
6 直接使用繼承自 JFrame 的方法和屬性的程式架構 如下:
7
7 事件與事件傾聽者: 所謂事件( Event )是指軟體在執行的過程 中,所可能發生的情況。 事件( Event )是物件導向程式非常重要的 機制,是建立程式和使用者間溝通的橋樑。 在程式執行過程中,發生啟動程式、結束程 式、按下滑鼠鍵、放開滑鼠鍵、按下鍵盤、 打開視窗及關閉視窗等事件時,程式就可以 根據發生的事件內容,執行特定的程式碼。
8
8 事件的發生與處理: Java 的事件處理是一種委託式( delegation ) 事件處理模式,事件的發生與處理,是由事 件類別( Event Class )產生的物件( Event Object )與事件傾聽者( Event Listener )所 構成,其關係如下圖所示:
9
9 事件作業過程如下: 當我們移動滑鼠指標在按鈕(事件來源)上按一 下滑鼠鍵時,按鈕會送出一個物件給 Action 事件傾 聽者( ActionListener )。 ActionListener 事件傾聽者收到委託的物件後,便 會啟動 actionPerformed() 方法,執行指定的工作。
10
10 物件與處理事件的方法: 在程式中要使用事件傾聽者 ActionListener , 必須實作( implements ) ActionListener 。 按鈕物件要委託 ActionListener 處理事件,要 使用 add ActionListener() 方法。
11
11 按鈕物件委託 ActionListener 處理事件的程式碼如 下:
12
12
13
13 程式執行結果如下:
14
14 事件類別: Java 的事件類別大多數繼承自 java.awt.AWTEvent 類別。
15
15 繼承關係如下圖所示:
16
16 事件類別名稱的功能與產生時機說明如下:
17
17 其他同樣繼承自 EventObject 類別的事件類別: 其他同樣繼承自 EventObject 類別的事件類別, 包括 CaretEvent 、 ChangeEvent 、 HyperlinkEvent 、 LineEvent 、 ListDataEvent 、 ListSelectionEvent 、 MenuEvent 、 PopupMenuEvent 、 TableColumnModelEvent 、 TableModelEvent 、 TreeExpansionEvent 、 TreeModelEvent 、 TreeSelectionEvent 、 UndoableEditEvent 等等,這些事件類別都存 放在 javax.swing.event 程式套件中。
18
18 事件的特性: 根據事件的特性,可分為低階事件( low-level events ) 與語意事件( semantic events )兩種。 低階事件類別包括 ComponentEvent 、 ContainerEvent 、 FocusEvent 、 KeyEvent 、 MouseEvent 、 PaintEvent 、 WindowEvent 等。 語意事件類別包括 ActionEvent 、 AdjustmentEvent 、 ItemEvent 、 TextEvent 、 HierarchyEvent 、 InputMethodEvent 、 InvocationEvent 等。 一般來說,由視窗系統所產生,或滑鼠、鍵盤等 產生的事件為低階事件,此外則為語意事件。
19
19 事件傾聽者: EventListener (事件傾聽者)是一個介面 ( interface ,請參考 B2 ), EventListener 是 所有事件傾聽者介面的上層介面。
20
20 EventListener 包含下列子介面 -1 : ActionListener‘ 接收 ActionEvent AdjustmentListener‘ 接收 AdjustmentEvent ComponentListener‘ 接收 ComponentEvent ContainerListener‘ 接收 ContainerEvent FocusListener‘ 接收 FocusEvent HierarchyListener‘ 接收 HierarchyEvent HyperlinkListener‘ 接收 HyperlinkEvent InputMethodListener ‘ 接收 InputMethodEvent ItemListener‘ 接收 ItemEvent KeyListener‘ 接收 KeyEvent
21
21 EventListener 包含下列子介面 -2 : ListDataListener‘ 接收 ListDataEvent ListSelectionListener‘ 接收 ListSelectionEvent MenuListener‘ 接收 MenuEvent MouseListener‘ 接收 MouseEvent MouseMotionListener‘ 接收 MouseEvent MouseWheelListener‘ 接收 MouseEvent PopupMenuListener‘ 接收 PopupMenuEvent TableColumnModelListener‘ 接收 TableColumnModelEvent TableModelListener‘ 接收 TableModelEvent TextListener‘ 接收 TextEvent
22
22 EventListener 包含下列子介面 -3 : TreeExpansionListener ‘ 接收 TreeExpansionEvent TreeModelListener‘ 接收 TreeModelEvent TreeSelectionListener‘ 接收 TreeSelectionEvent UndoableEditListener‘ 接收 UndoableEditEvent WindowFocusListener‘ 接收 WindowEvent WindowListener‘ 接收 WindowEvent WindowStateListener‘ 接收 WindowEvent
23
23 事件聽者數到事件時的執行方法: 當事件傾聽者收到事件時,會分別執行不同 的方法。 例如 ActionListener 傾聽者介面會執行 actionPerformed() 方法,因此在程式中就要 實作 actionPerformed() 方法,而使用 KeyListener 傾聽者介面,則程式中就要實作 keyPressed() 、 keyReleased() 和 keyTyped() 等 方法。
24
24 視窗事件: 使用 WindowListener (視窗事件傾聽者)來 接收視窗事件,必須實作下列七個方法: windowActivated()‘ 視窗作用中 windowDeactivated()‘ 視窗沒有作用 windowOpened()‘ 視窗已經開啟 windowClosed()‘ 視窗已經關閉 windowClosing()‘ 關閉視窗中 windowIconified()‘ 最小化視窗 windowDeiconified()‘ 取消最小化視窗
25
25 前面章節中,有許多程式中都是利用下列程式碼 來關閉視窗,並結束程式: setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE);
26
26 使用 WindowListener 來接收關閉視窗的事件,進 而結束視窗程式,程式碼如下:
27
27
28
28
29
29 執行程式畫面顯示如下:
30
30 透過 WindowAdapter 類別來關閉視窗,程式碼如 下:
31
31 執行程式,選擇關閉視窗鈕就可以直接關閉視窗 程式,畫面顯示如下:
32
32 C2-2 以時間事件來控制物件 利用時間事件變化來移動物件 同時控制多個不同移動速度的元件 應用三角函數製作圓形運動 畫面上彈跳的小球
33
33 利用時間事件變化來移動物件: 時間事件可以用來控制視窗上元件的變化, 例如製作出元件緩緩上升的效果,畫面顯示 如下:
34
34 時間事件: 時間事件的時間單位為千分之一秒,若設定 為 500 ,則每 1/2 秒觸發一次。
35
35 以下就是製作氣球元件緩緩上升效果的程式碼:
36
36
37
37
38
38 同時控制多個不同移動速度的元件: 同時要控制多個不同移動速度的元件有兩種 方法。 一種是使用一個時間物件,然後設定各元件 不同的移動間隔;另一種是每一個元件分別 對應一個時間物件,而分別設定不同的時間 間隔。
39
39 控制多個不同移動速度的畫面顯示如下:
40
40 以下就是同時控制多個不同移動速度元件的程式 碼:
41
41
42
42 應用三角函數製作圓形運動: 應用內建的三角函數,包括 sin 、 cos 、 tan 、 atan…… 等等,可以應用這些函數來計算座 標的位置。 例如:圓形運動、拋物線運動等軌道座標計 算。
43
43 以下就是圓形軌道運動的執行畫面:
44
44 以下就是應用三角函數計算圓形軌道的程式碼:
45
45
46
46
47
47 畫面上彈跳的小球: 應用座標變化,可以製作出圖形彈跳的效果。
48
48 以下就是製作彈跳效果的程式碼:
49
49
50
50
51
51 執行程式,圖形就會有彈跳的效果:
52
52 C2-3 滑鼠控制技巧 滑鼠事件與事件傾聽者 顯示滑鼠座標位置 用滑鼠指標拉動佈景 簡易打地鼠程式 拖移物件與配對 座標位置記錄器
53
53 滑鼠事件與事件傾聽者: MouseListener 和 MouseMotionListener 是負責 接收滑鼠事件的傾聽者介面。
54
54 MouseListener 必須實作下列五個方法: mousePressed(MouseEvent e)‘ 按下滑鼠鍵 mouseReleased(MouseEvent e)‘ 放掉滑鼠鍵 mouseEntered(MouseEvent e)‘ 滑鼠進入按鍵 區 mouseExited(MouseEvent e)‘ 滑鼠離開按鍵 區 mouseClicked(MouseEvent e)‘ 按了一下滑鼠 鍵
55
55 MouseMotionListener 則必須實作下列兩個方法: mouseMoved(MouseEvent e)‘ 移動滑鼠 mouseDragged(MouseEvent e)‘ 拖移滑鼠
56
56 下面就是 MouseListener 接收滑鼠事件的程式碼:
57
57
58
58
59
59 完成圖: 執行程式時,當滑鼠在按鍵上發生按下、放 掉、進入、移開等事件時,視窗上會顯示事 件的訊息。
60
60 下面就是 MouseMotionListener 接收滑鼠事件的程 式碼:
61
61
62
62 執行程式,畫面顯示如下:
63
63 利用 InputEvent 事件判斷到底是按下左鍵還是右 鍵 :
64
64 以下就是測試滑鼠按鍵的程式碼:
65
65
66
66
67
67 完成圖: 當滑鼠在滑鼠按鍵區按下滑鼠左鍵,視窗上 方會顯示 “ 按了一下左鍵的訊息 ” ;當滑鼠在 滑鼠按鍵區按下滑鼠右鍵,視窗上方會顯示 “ 按了一下右鍵的訊息 ” 。
68
68 滑鼠事件與事件傾聽者的注意事項: 使用 MouseListener 和 MouseMotionListener 時, 不論使用哪一個方法,都必須把其它沒有用 到的方法輸入到程式中,否則,程式將無法 執行。
69
69 顯示滑鼠座標位置: 在應用滑鼠事件來執行程式時,經常需要滑 鼠的座標位置來輔助。
70
70 以下就是顯示滑鼠座標位置的程式碼:
71
71
72
72 完成圖: 在視窗中任意移動滑鼠,就會顯示滑鼠座標 的位置。
73
73 用滑鼠指標拉動佈景: 佈景和滑鼠指標的互動,也是製作動態網頁 經常使用到的技巧。
74
74 以下就是製作用滑鼠指標拉動佈景的程式碼:
75
75
76
76
77
77 完成圖:
78
78 簡易打地鼠程式: 這個例子的操作規則是畫面上會顯示小老鼠, 操作者只要在小老鼠上按一下滑鼠左鍵,就 可以得到 10 分。
79
79 以下就是設計簡易打地鼠程式的程式碼:
80
80
81
81
82
82 執行程式,畫面顯示如下:
83
83 拖移物件與配對: 使用滑鼠指標來拖移( drag )是經常使用到 的控制技巧,以下這個例子將說明拖移物件 和檢查位置等兩個技巧。
84
84 拖移物件和檢查位置的程式碼如下:
85
85
86
86
87
87
88
88
89
89 完成圖: 拖移水果到正確的位置,水果就會放在該處, 若放錯,則會彈回到原來的位置。
90
90 座標位置記錄器: 設計軟體時,若需要找出畫面上的座標位置, 可以設計一個簡單的程式來幫忙自動產生座 標串列。
91
91 以下就是製作座標記錄器的程式碼:
92
92
93
93
94
94 完成圖: 拖移紅色圓形物件到想要記錄座標的位置, 然後按一下滑鼠左鍵,就會將座標位置記錄 在下方的文字方塊區內。
95
95 C2-4 鍵盤控制技巧 鍵盤事件傾聽者與 按鍵值 使用 Enter 鍵輸入答案 利用鍵盤按鍵拉動佈景 模擬鍵盤按鍵狀態
96
96 鍵盤事件傾聽者與按鍵值: KeyListener 是負責接收鍵盤事件的傾聽者介 面, KeyListener 必須實作( implements )下 列三個方法: keyPressed(KeyEvent evt)‘ 按下按鍵 keyTyped(KeyEvent evt)‘ 按一下按鍵 keyReleased(KeyEvent evt)‘ 放掉按鍵
97
97 英文字母與數字鍵:
98
98
99
99 數字板( Keypad ):
100
100 功能鍵:
101
101 其它按鍵:
102
102 使用 Enter 鍵輸入答案: 使用 JTextField 物件,可以讓使用者直接輸 入資料,不過無法直接按 鍵,而下面 這個例子就可以在按 鍵後開始檢查答 案。
103
103 以下就是使用 鍵來輸入答案的程式碼:
104
104
105
105
106
106
107
107
108
108 完成圖: 完成後執行程式,依顯示的加法題目,在鍵 盤上輸入答案,然後按下鍵盤上的 鈕, 確認答案,就會出現答對了或答錯了的回饋 畫面。
109
109 利用鍵盤按鍵拉動佈景: 前一節曾經介紹使用滑鼠指標來拉動佈景的 技巧,當然,利用鍵盤按鍵也可以拉動佈景。
110
110 以下就是利用鍵盤按鍵拉動佈景的程式碼:
111
111
112
112
113
113 完成圖: 在鍵盤上按下 或 鍵,佈景就會被拉動 了!
114
114 模擬鍵盤按鍵狀態: 所謂模擬鍵盤按鍵狀態,是指在螢幕上顯示 鍵盤上的按鍵為按下的狀態,或放掉的狀態, 例如當同時按下鍵盤上的 A 、 B 鍵時,畫面 上的 A 、 B 鍵會呈現被按下的狀態。
115
115 以下就是製作模擬鍵盤按鍵狀態互動程式的程式 碼:
116
116
117
117
118
118
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.