Presentation is loading. Please wait.

Presentation is loading. Please wait.

視窗程式設計 9. 清單方塊 Chih Hung Wang Reference:

Similar presentations


Presentation on theme: "視窗程式設計 9. 清單方塊 Chih Hung Wang Reference:"— Presentation transcript:

1 視窗程式設計 9. 清單方塊 Chih Hung Wang Reference:
1. Java 2 視窗程式設計,文魁出版社,位元文化編著 (2008) (教科書) 2. 深入研究Java Swing,上奇資訊股份有限公司,黃嘉輝著 (2011) 3. Java SE 6.0視窗程式設計之道,碁峰出版社,黃嘉輝著 (2008) 4. Java 初學指引,博碩文化,陳錦輝著 (2010) 視窗程式設計 9. 清單方塊 Chih Hung Wang

2 JList類別的運作架構 清單方塊用於供使用者選取清單內的一個或數個項目,如下圖所示。 清單方塊將由JList類別建立,繼承架構如下所示。

3 處理選取方式的ListSelectionModel介面
處理資料的ListModel介面 JList類別並不處理清單方塊內顯示選項的內容,而將這個工作交給實作ListModel介面的Model物件。所以,當取得選項資料時,將呼叫實作ListModel介面之類別的方法,而不是JList類別的方法。JList類別預設使用的ListModel物件,其型別為DefaultListModel類別。 ListModel介面規範實作介面的類別,必須提供註冊/移除監聽ListDataEvent事件的監聽器物件。ListDataEvent事件將在新增、移除或改變清單方塊內選項時,被觸發。 處理選取方式的ListSelectionModel介面 JList類別所建立的清單方塊,將提供單選、多選與不連續多選三種方式。對於選取功能的處理,將由實作ListSelectionModel介面的Model物件負責。 但由於JList類別將定義處理ListSelectionModel物件所需使用的方法,這些方法將把傳入參數設定給JList物件實際使用的ListSelectionModel物件。JList類別預設使用的ListSelectionModel物件,其型別為DefaultListSelectionModel類別將以String方式顯示選項。 ListSelectionModel介面定義了許多增加、移除或改變選取範圍的方法,並規範實作介面的類別,必須提供註冊/移除監聽ListSelectionEvent事件的監聽器。ListSelectionEvent事件將於清單方塊的選取範圍發生改變時,被觸發。

4 JList類別的基本運用 處理畫面顯示的ListCellRenderer
JList類別所建立的清單方塊,其選項的顯示方式,將由實作ListCellRenderer介面的物件負責。JList類別預設使用的ListCellRenderer物件,其型別為DefaultListCellRenderer類別。透過實作ListCellRenderer介面或繼承DefaultListCellRenderer類別,您可自訂處理清單方塊顯示方式的ListCellRenderer物件。 JList類別的基本運用 這一節將為您介紹以JList類別建立清單方塊的基本觀念,包括建立單選、複選與不連續複選三種類型的清單方塊,以及ListSelectionEvent事件的回應。 範例8-1將示範建立三種選取方式的清單方塊,並運用回應ListSelectionEvent事件的機會取得使用者選取之選項,執行結果如下圖所示。

5 JList類別的建構子 以下將介紹JList類別建構子的規格: public JList()
public JList(Vector<?> listData) public JList(Object[] listData) public JList(ListModel dataModel) JList類別的常用方法 下表將列出JList類別較常運用的方法。

6

7

8 ListSelectionEvent事件的回應
當清單方塊內選項的選取狀態改變時,將觸發ListSelectionEvent事件。請注意!是狀態改變,不論是由選取或取消選取均將引發事件。回應此事件的監聽器必須實作ListSelectionListener介面,並呼叫addListSelectionListener()方法註冊。圖為ListSelectionEvent類別的繼承架構:

9 void valueChanged(ListSelectionEvent e)
以下為ListSelectionListener介面定義了一個void itemStateChanged()方法,規格如下: void valueChanged(ListSelectionEvent e) ListSelectionEvent事件類別除繼承EventObject類別定義的方法,還提供下表所列的方法。

10 回應ListSelectionEvent事件時,必須留意以下兩件事情。
當運用滑鼠點選選項時,按下與放開滑鼠按鍵的動作,均將引發ListSelectionEvent事件,故監聽器將收到兩次事件。由於第一個引發的事件,發生於滑鼠按下與放開事件之間,故為連續事件。此時,您可以呼叫getValueIsAdjusting()方法,判斷欲處理連續事件還是獨立事件,避免處理兩次事件回應動作而產生副作用,請參考範例8-1的說明。若以鍵盤按鍵移動被選取的選項,則將僅引發一次ListSelectionEvent事件。 監聽器物件回應事件時,無法從ListSelectionEvent物件取得清單方塊內哪些選項被選取。因此,必須取得發出事件的清單方塊,然後呼叫getSelectedValue()方法、getSelectedValues()方法、getSelectedIndex()方法與getSelectedIndices()方法取得被選取選項的資訊。

11 清單方塊內選項的排列 JList類別將提供三種顯示清單方塊內選項的方式,欲設定時,需呼叫setLayoutOrientation()方法,此方法為JDK 1.4開始新增。呼叫時,將傳入下表代表排列方式的JList常數。 範例8-2將以清單方塊顯示在『C:\』資料夾內,各檔案的路徑與名稱,並運用視窗上方的群組選擇按鈕控制清單方塊顯示選項的方式,執行結果如下圖所示,預設使用垂直排列(VERTICAL)。

12 下圖為水平換行排列(HORIZONTAL_WRAP)。
下圖為垂直換行排列(VERTICAL_WRAP)。

13 選項資料的操作 – ListModel物件與ListDataEvent事件
前面提過清單方塊將運用Model物件處理選項資料。清單方塊預設使用的Model物件型別為DefalutListModel類別,下表將說明較重要的方法:

14

15 範例8-3將列出C:\資料夾內所有檔案,並介紹如何運用Model物件控制清單方塊內顯示以下三種資料:
資料夾內所有檔案及資料夾 僅列出檔案 僅列出資料夾 執行結果如下圖所示。 ListDataEvent事件的回應 當新增/刪除/修改Model物件內選項資料時,將觸發ListDataEvent事件。ListDataEvent事件的監聽器物件必須實作ListDataListener介面,該介面將規範監聽器類別必須實作以下方法:

16 ListDataEvent事件類別除繼承EventObject類別定義的方法,還提供下表所列的方法。

17 範例8-4將介紹如何運用Model物件處理清單方塊的選項,以及ListDataEvent事件的回應,執行結果如下圖所示。
以轉譯器自訂選項的顯示 Swing為了讓程式設計師能夠更有彈性地自訂清單方塊內選項的顯示方式,提供ListCellRenderer介面供程式設計師實作處理選項繪製的轉譯器類別。JList類別預設使用的轉譯器之型別為DefaultListCellRenderer類別。 ListCellRenderer介面將規範一個getListCellRendererComponent()方法。當顯示清單方塊時,JList類別將呼叫轉譯器物件,取得顯示清單方塊內選項的元件,回傳值型別為Component類別。以下為getListCellRendererComponent()方法的規格: Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)

18 範例8-5將分別以實作ListCellRenderer介面與繼承DefaultListCellRenderer類別的方式,定義處理選項顯示的轉譯器,執行結果如下圖所示。


Download ppt "視窗程式設計 9. 清單方塊 Chih Hung Wang Reference:"

Similar presentations


Ads by Google