109
第 14 第 第第第第 Swing Java 2 第第第第第第第第第

第 14 章 圖形介面 Swing

Embed Size (px)

DESCRIPTION

第 14 章 圖形介面 Swing. Java 2 程式設計入門與應用. 目錄. 14-1 Swing 的簡介 14-2 Swing 的視窗元件 14-3 Swing 的繪圖與選擇視窗 溫故知新 自我突破習題. 14-1 Swing的簡介. 14-1.1Swing的架構 14-1.2JComponent類別的函式. 前言:. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 14 章 圖形介面 Swing

第 14章 圖形介面 Swing

Java 2 程式設計入門與應用

Page 2: 第 14 章 圖形介面 Swing

2

目錄

14-1 Swing的簡介14-2 Swing的視窗元件14-3 Swing的繪圖與選擇視窗 溫故知新自我突破習題

Page 3: 第 14 章 圖形介面 Swing

3

14-1   Swing 的簡介

14-1.1 Swing 的架構14-1.2 JComponent 類別的函式

Page 4: 第 14 章 圖形介面 Swing

4

前言:

由於 AWT 在不同平台下執行有問題,而且缺乏一些基礎的元件來設計較複雜的圖形使用者介面,因此衍生出 Java 基礎類別( Java Foundation Classes ,簡稱 JFC )取代並包含 AWT ,主要的部分稱為「 Swing 」。

Page 5: 第 14 章 圖形介面 Swing

5

14-1.1  Swing的架構

因為 Swing 是繼承自 AWT ,所以其元件仍然保有原本 AWT 元件的功能,為了區分 Swing元件與 AWT 元件的名稱,在每一種 Swing 元件的前面都加上一個大寫字母“ J” ,例如: JFrame 、 JButton 、 JLabel 、 JList 、 JCheckbox 、 JMenuBar 等元件。

Page 6: 第 14 章 圖形介面 Swing

6

Swing的繼承圖:

Swing 套件的相關元件皆定義在 javax.swing 類別庫中,其中大部分的元件都是 JComponent的子類別,下面為 Swing 的繼承圖:

Page 7: 第 14 章 圖形介面 Swing

7

下面為 Swing繼承圖的說明:

從上面的繼承圖可以得知, Swing 的元件都是繼承自 AWT 的 Container 類別,所以仍然可使用 AWT 元件的成員、版面配置、傾聽者類別、轉接器類別與事件函式。

在本章只介紹 Swing 元件新增的功能,繼承自AWT 的函式請參考第 13 章。

Page 8: 第 14 章 圖形介面 Swing

8

Swing 視窗元件常見的事件處理類別整理如下:

Page 9: 第 14 章 圖形介面 Swing

9

下表兩種事件是 Swing類別所新增的:

上面的事件處理類別幾乎都是第 13 章介紹過的,所以用法相同,只有下面兩種事件是 Swing 類別所新增的,這兩種事件類別都只有傾聽者,沒有轉接器可以使用:

在程式中處理上面兩種事件時,必須要載入 javax.swing.event ,才可以執行程式。

Page 10: 第 14 章 圖形介面 Swing

10

14-1.2  JComponent類別的函式

利用 JComponent 類別的函式可以設定子物件的許多屬性,例如:背景顏色、邊框樣式、字型與提示文字等。

Page 11: 第 14 章 圖形介面 Swing

11

下面是 JComponent類別常見的函式:

Page 12: 第 14 章 圖形介面 Swing

12

下面是 Swing 套件的 BorderFactory 類別中建立 Border物件的函式:上面函式中出現的 Border 物件,可以利用 Swi

ng 套件的 BorderFactory 類別來建立,下面是該類別中建立 Border 物件的函式:

Page 13: 第 14 章 圖形介面 Swing

13

例如下面的程式碼,建立一個邊框樣式為凸起的按鈕:

Page 14: 第 14 章 圖形介面 Swing

14

14-2  Swing的視窗元件

14-2.1  視窗元件 JFrame14-2.2  基本元件與文字元件14-2.3  選擇元件 14-2.4  捲軸元件與滑動軸元件14-2.5  對話方塊元件14-2.6  功能表選單與工具列元件

Page 15: 第 14 章 圖形介面 Swing

15

前言:

Swing 元件的用法與 AWT 大同小異,差別在於利用 Swing 撰寫的視窗程式外觀與 AWT 的不同,除了視窗預設背景顏色為淺灰色,視窗中的元件外觀也會顯得較柔和化。

Page 16: 第 14 章 圖形介面 Swing

16

14-2.1 視窗元件 JFrame

下面是 JFrame 類別常見的函式:

Page 17: 第 14 章 圖形介面 Swing

17

例如下面的程式碼:

Page 18: 第 14 章 圖形介面 Swing

18

Page 19: 第 14 章 圖形介面 Swing

19

上述程式碼分析如下:

第 8 行建立圖片物件 img ,然後在第 9 行設定視窗標題的圖示為 img ,則執行程式後,視窗左上角的圖示會從預設的 變成 。

在 AWT 中必須處理 WindowEvent 事件函式,才可以點選視窗右上角的 關閉鈕關閉視窗。而 Swing 只要利用 setDefaultCloseOperation 函式就可以將視窗關閉,並釋放視窗的記憶體空間(第 10 行)。

Page 20: 第 14 章 圖形介面 Swing

20

完成後,執行程式的畫面顯示如下:

Page 21: 第 14 章 圖形介面 Swing

21

14-2.2 基本元件與文字元件

在視窗程式中常用的基本元件,不外乎就是按鈕元件 JButton 與標籤元件 JLabel ,以及 JTextField 、 JPasswordField 與 JTextArea 等文字元件。

Page 22: 第 14 章 圖形介面 Swing

22

下面是基本類別常見的函式 -1:

Page 23: 第 14 章 圖形介面 Swing

23

下面是基本類別常見的函式 -2:

Page 24: 第 14 章 圖形介面 Swing

24

下面是基本類別常見的函式 -3:

Page 25: 第 14 章 圖形介面 Swing

25

下面是基本類別常見的函式 -4:

Page 26: 第 14 章 圖形介面 Swing

26

下面是基本類別常見的函式 -5:

Page 27: 第 14 章 圖形介面 Swing

27

下面是基本類別常見的函式 -6:

上述函式中,若要設定文字區域元件 JTextArea 顯示捲軸,必須建立一個捲軸元件 JScrollPane ,然後設定捲軸內容為 JTextArea 元件,其語法如下:

Page 28: 第 14 章 圖形介面 Swing

28

Page 29: 第 14 章 圖形介面 Swing

29

將元件加入 Swing視窗的步驟:

AWT 可以直接在 Frame 視窗中加入元件,但Swing 必須先利用 JFrame 類別的 getContentPane 函式建立一個 Container容器,然後將元件加入 Container容器中。

Page 30: 第 14 章 圖形介面 Swing

30

將元件加入 Swing 視窗的步驟可以分為下面四個部分:1. 載入 AWT 與 Swing 類別庫:因為 Container 類別定

義在 AWT 套件中,所以撰寫程式碼時必須同時載入java.awt 類別庫與 javax.swing 類別庫,才能夠執行成功。

2. 建立 JFrame 視窗物件。

3. 取得視窗的 ContentPane 物件:取得 JFrame 視窗物件的 ContentPane 物件,建立一個 Container容器。

4. 利用 add 函式將元件加入 Container容器中:利用 add 函式依序將元件加入 3. 建立的 Container容器中。

Page 31: 第 14 章 圖形介面 Swing

31

例如下面的程式碼:

Page 32: 第 14 章 圖形介面 Swing

32

Page 33: 第 14 章 圖形介面 Swing

33

Page 34: 第 14 章 圖形介面 Swing

34

上述程式碼分析如下:

1. 第 7 行利用 getContentPane 函式取得視窗 f 的 ContentPane 物件,Swing 視窗的元件必須要加入這個容器中才可以顯示出來。

2. 第 9 行建立 JButton 物件 b1 ,並在參數中傳遞一個 ImageIcon 物件,表示按鈕上顯示圖片 ch14_02_02.gif 。

3. 第 17 行建立 JScrollPane 物件,並同時指定捲軸物件的內容是文字區域 t3 。因為捲軸物件已經包含文字區域,所以直接設定捲軸物件的位置與大小,然後將捲軸物件加入 ContentPane 物件就可以了,文字區域的大小會隨著捲軸物件而自動調整。

4. 第 22 、 24 與 33 行分別設定按鈕 b1 、 b2 與文字區域 t3 的邊框樣式。

5. 第 34 行利用 setLineWrap 函式設定輸入文字區域的資料會自動換行,則輸入資料時,只會顯示垂直捲軸,而不會顯示水平捲軸。

6. 第 46~51 行做事件處理,當點選 鈕後,會在文字區域 t3 顯示文字。

Page 35: 第 14 章 圖形介面 Swing

35

完成後,畫面顯示如下:

完成後執行程式,發現在 JFrame 中,元件的座標位置也是從視窗的左上角開始計算,但是沒有包含視窗標題列的高度與邊框的寬度,畫面顯示如下:

Page 36: 第 14 章 圖形介面 Swing

36

14-2.3 選擇元件

JCheckBox 與 JRadioButton 元件是在設計視窗程式時,最常用於選擇題的選項設計,以供使用者選擇; JList 是可以從清單中選擇一個或多個資料的元件,而 JComboBox 則是只能選擇一種資料的下拉式選單。

Page 37: 第 14 章 圖形介面 Swing

37

下面是選擇類別常見的函式 -1:

Page 38: 第 14 章 圖形介面 Swing

38

下面是選擇類別常見的函式 -2:

Page 39: 第 14 章 圖形介面 Swing

39

下面是選擇類別常見的函式 -3:

Page 40: 第 14 章 圖形介面 Swing

40

下面是選擇類別常見的函式 -4:

Page 41: 第 14 章 圖形介面 Swing

41

下面是選擇類別常見的函式 -5:

Page 42: 第 14 章 圖形介面 Swing

42

下面是選擇類別常見的函式 -6:

Page 43: 第 14 章 圖形介面 Swing

43

下面是選擇類別常見的函式 -7:

Page 44: 第 14 章 圖形介面 Swing

44

例如下面的程式碼:

Page 45: 第 14 章 圖形介面 Swing

45

Page 46: 第 14 章 圖形介面 Swing

46

Page 47: 第 14 章 圖形介面 Swing

47

上述程式碼分析如下:

1. 第 17 行宣告字串陣列 s 中有 4筆資料,然後在第 19 行建立清單方塊時,設定清單方塊的選項為字串陣列 s 的元素。

2. 第 23~26 行新增 4 個項目到下拉式選單 combo 中。3. 第 29 與 30 行建立一個按鈕群組 group ,然後將單選的選項按鈕

r1 與 r2 加入該按鈕群組,這樣這兩個選項按鈕一次只能選取一個。

4. 第 32 行設定清單方塊為單選模式,第 33 與 34 行設定當選取清單方塊的選項時,選項的背景顏色為粉紅色,字體顏色為藍色。

5. 第 36 行設定清單方塊的寬度固定為 100 。6. 第 48~53 行做事件處理,當清單方塊上的選擇選項改變時,就會

在標籤上顯示文字,因為 ListSelectionEvent 屬於 Swing 類別的事件處理,所以必須在第 3 行載入 javax.swing.event 。

Page 48: 第 14 章 圖形介面 Swing

48

完成後,執行程式的畫面顯示如下:

Page 49: 第 14 章 圖形介面 Swing

49

Page 50: 第 14 章 圖形介面 Swing

50

Page 51: 第 14 章 圖形介面 Swing

51

14-2.4 捲軸元件與滑動軸元件

透過 JScrollBar 、 JSlider 與 JScrollPane 元件,不僅可以顯示元件的完整內容,也可製作出物件移動或頁面捲動的效果。

Page 52: 第 14 章 圖形介面 Swing

52

下面是 JScrollBar與 JSlider類別常見的函式 -1:

Page 53: 第 14 章 圖形介面 Swing

53

下面是 JScrollBar與 JSlider類別常見的函式 -2:

Page 54: 第 14 章 圖形介面 Swing

54

下面是 JScrollBar與 JSlider類別常見的函式 -3:

Page 55: 第 14 章 圖形介面 Swing

55

下面是 JScrollBar與 JSlider類別常見的函式 -4:

Page 56: 第 14 章 圖形介面 Swing

56

例如下面的程式碼:

Page 57: 第 14 章 圖形介面 Swing

57

Page 58: 第 14 章 圖形介面 Swing

58

Page 59: 第 14 章 圖形介面 Swing

59

上述程式碼分析如下:

1. 第 26 行設定視窗 f 為 BorderLayout 版面配置方式,在視窗的東、南、西、北、中分別加入垂直捲軸、水平捲軸、垂直滑動軸、水平滑動軸與文字區域。

2. 第 21 行設定顯示水平滑動軸的刻度,並在第 22 與 23 行設定主要刻度大小為 10 ,次要刻度大小為 5 。

3. 第 42~49 行做捲軸的事件處理,當捲動 scroll1 與 scroll2 物件時,就在文字區域中即時改變目前捲軸的數值。

4. 第 51~58 行做滑動軸的事件處理,當滑動 slider1 與slider2 物件時,就在文字區域中即時改變目前滑動軸的數值。

Page 60: 第 14 章 圖形介面 Swing

60

完成後,執行程式的畫面顯示如下:

Page 61: 第 14 章 圖形介面 Swing

61

14-2.5 對話方塊元件

透過 JOptionPane 對話方塊元件可以建立確定視窗、輸入視窗、訊息視窗與選單視窗等對話方塊。

Page 62: 第 14 章 圖形介面 Swing

62

下面只有介紹 JOptionPane 類別常見的對話方塊函式 -1:

Page 63: 第 14 章 圖形介面 Swing

63

下面只有介紹 JOptionPane 類別常見的對話方塊函式 -2:

Page 64: 第 14 章 圖形介面 Swing

64

下面只有介紹 JOptionPane 類別常見的對話方塊函式 -3:

Page 65: 第 14 章 圖形介面 Swing

65

下面只有介紹 JOptionPane 類別常見的對話方塊函式 -4:

Page 66: 第 14 章 圖形介面 Swing

66

下面建立一個 BorderLayout版面配置的視窗,其程式碼如下: 下面的程式碼建立一個 BorderLayout 版面配置的視窗,然後在視

窗的上面加入一個面板,面板中有 4 個功能按鈕,點選這些按鈕會跳出不同的對話方塊,配合事件處理函式 actionPerformed做出不同的反應:

Page 67: 第 14 章 圖形介面 Swing

67

Page 68: 第 14 章 圖形介面 Swing

68

Page 69: 第 14 章 圖形介面 Swing

69

Page 70: 第 14 章 圖形介面 Swing

70

上述建立一個 BorderLayout版面配置視窗的程式碼分析如下:1. 因為 JOptionPane 類別中的對話方塊都是透過靜態函

式產生的,所以不用建立 JOptionPane 物件,就可以直接利用 JOptionPane.靜態成員函式 (引數列…… )來建立對話方塊。

2. 第 37 行建立一個確認視窗,將點選的按鈕常數值設定給 select 變數,隨著點選不同的按鈕,分別在文字區域中顯示不同的訊息。

3. 第 46 行建立一個輸入視窗,將輸入的字串儲存在 s變數中。

4. 第 50 行建立一個訊息視窗,警告使用者即將關閉視窗。

5. 第 54 行宣告一個字串陣列 data ,第 55 行設定選項視窗中的選項為此字串陣列中的資料,當點選選項後會在文字區域中顯示訊息。

Page 71: 第 14 章 圖形介面 Swing

71

完成後,執行程式的畫面顯示如下 -1:

Page 72: 第 14 章 圖形介面 Swing

72

完成後,執行程式的畫面顯示如下 -2:

Page 73: 第 14 章 圖形介面 Swing

73

14-2.6 功能表選單與工具列元件

Swing 套件提供的 JPopupMenu 、 JMenuBar 、JMenu 、 JMenuItem 與 JToolBar 元件皆繼承自JComponent 類別,可以在視窗中建立功能表選單或工具列。

Page 74: 第 14 章 圖形介面 Swing

74

下面是功能表選單與工具列類別常見的函式 -1:

Page 75: 第 14 章 圖形介面 Swing

75

下面是功能表選單與工具列類別常見的函式 -2:

Page 76: 第 14 章 圖形介面 Swing

76

下面是功能表選單與工具列類別常見的函式 -3:

Page 77: 第 14 章 圖形介面 Swing

77

Page 78: 第 14 章 圖形介面 Swing

78

例如下面的程式碼:

Page 79: 第 14 章 圖形介面 Swing

79

Page 80: 第 14 章 圖形介面 Swing

80

Page 81: 第 14 章 圖形介面 Swing

81

Page 82: 第 14 章 圖形介面 Swing

82

Page 83: 第 14 章 圖形介面 Swing

83

Page 84: 第 14 章 圖形介面 Swing

84

上述程式碼分析如下:

1. 第 11~15 行建立快顯功能表,並建立 3 個選項按鈕項目與 1 個按鈕群組,然後在第 35~37 行將此 3 個選項按鈕項目加入同一個快顯功能表與按鈕群組。

2. 第 27 行建立工具列時指定方向為 1 ,將工具列的按鈕垂直排列。3. 第 34 行利用 getFont 函式取得標籤的字型,然後再利用 getName

函式取得標籤的字型名稱。4. 第 62~71 行建立滑鼠事件處理,然後在第 64 與 68 行利用 isPopup

Trigger 函式,判斷在視窗中是否已經按下快顯功能表(是否已經觸發)。

5. 第 73~111 行的 ActionListener 傾聽者類別,分別處理點選快顯功能表、功能表列與工具列選項時,程式會執行的動作。

Page 85: 第 14 章 圖形介面 Swing

85

完成後,執行程式的畫面顯示如下:

Page 86: 第 14 章 圖形介面 Swing

86

14-3  Swing的繪圖與選擇視窗

14-3.1 Swing 的繪圖 14-3.2 顏色選擇器與檔案選擇器

Page 87: 第 14 章 圖形介面 Swing

87

前言:

Swing 與 AWT 的繪圖方式相同,差別在於要將 Frame宣告為 JFrame 、 Panel宣告成 JPanel…… 等等。

而 Swing 套件中新增的 JColorChooser 元件可以建立顏色選擇器, JFileChooser 元件可以建立檔案選擇器。

Page 88: 第 14 章 圖形介面 Swing

88

14-3.1  Swing的繪圖 Swing 繪圖的函式可以參考 13-4 小節的說明,下面舉

一個繪圖的例子,只有粗體部分是 Swing 所新增的,其他寫法皆與 AWT 相同,程式碼如下:

Page 89: 第 14 章 圖形介面 Swing

89

Page 90: 第 14 章 圖形介面 Swing

90

Page 91: 第 14 章 圖形介面 Swing

91

完成後,畫面顯示如下:

完成後執行程式,點選 鈕就會在視窗中繪圖,畫面顯示如下:

完成後

Page 92: 第 14 章 圖形介面 Swing

92

Page 93: 第 14 章 圖形介面 Swing

93

14-3.2 顏色選擇器與檔案選擇器

Swing 提供的 JColorChooser 元件可以讓使用者自行選擇繪圖物件的顏色,而 JFileChooser元件則可以讓使用者執行開啟或儲存檔案等動作。

Page 94: 第 14 章 圖形介面 Swing

94

下面是 JColorChooser與 JFileChooser類別常見的函式 -1:

Page 95: 第 14 章 圖形介面 Swing

95

下面是 JColorChooser與 JFileChooser類別常見的函式 -2:

Page 96: 第 14 章 圖形介面 Swing

96

下面是 JColorChooser與 JFileChooser類別常見的函式 -3:

Page 97: 第 14 章 圖形介面 Swing

97

下面讓使用者自行開啟指定的文字檔,其程式碼如下: 下面的程式碼讓使用者自行開啟指定的文字檔,然後

在文字區域中顯示檔案的內容,顯示資料後可以設定文字的顏色,程式碼如下:

Page 98: 第 14 章 圖形介面 Swing

98

Page 99: 第 14 章 圖形介面 Swing

99

Page 100: 第 14 章 圖形介面 Swing

100

Page 101: 第 14 章 圖形介面 Swing

101

上述讓使用者自行開啟指定的文字檔的程式碼分析如下:1. 第 32 行判斷當點選 鈕時,就在第 34 行顯示開啟檔案的對話方塊,然後將使用者按下按鈕的常數值指定給變數 dialog 。

2. 第 35 行判斷若使用者選擇檔案後並點選 鈕後,就在第 36~45 行利用 FileReader 類別讀取檔案中的文字,然後輸出到文字區域中(做檔案處理時必須拋出 IOException 例外)。

3. 第 47~51 行判斷當點選 鈕時,就顯示一個顏色選擇視窗,使用者點選想要的顏色後,就將文字區域中的文字設成指定的顏色。

Page 102: 第 14 章 圖形介面 Swing

102

完成後,執行程式的畫面顯示如下 -1:

Page 103: 第 14 章 圖形介面 Swing

103

完成後,執行程式的畫面顯示如下 -2:

Page 104: 第 14 章 圖形介面 Swing

104

Page 105: 第 14 章 圖形介面 Swing

105

Page 106: 第 14 章 圖形介面 Swing

106

溫故知新 -1:

Page 107: 第 14 章 圖形介面 Swing

107

溫故知新 -2:

Page 108: 第 14 章 圖形介面 Swing

108

自我突破習題 -選擇題:

Page 109: 第 14 章 圖形介面 Swing

109

自我突破習題 -實作題: