今天來記錄一下如何監控 JTable 的選擇變化。其實這個功能在寫資料庫應該會很用到,比如查看一個表單,然後自動在另一個 JTable 顯示出表單內的細項,這時就要監控第一個 JTable 選擇變化了。話說 JTable 裏包含三大 Model,有 TableModel 記錄所有資料,有 TableColumnModel 記錄表格標題的資料,最後就是 ListSelectionModel 記錄選擇的資料。而 Model 是做啥的,其實就是一堆資料的處理,包含取得,設定等,當然最重要的就是資料變化的通知;當 Model 資料產生變化時,會通知註冊在 Model 裏所有的 listener,而 listener 根據該變化做出所需的動作。

ListSelectionModel 相對應的監聽介面為 ListSelectionListener,加入監聽的函數為 addListSelectionListener。ListSelectionListener 介面只包含一個函數 valueChanged(ListSelectionEvent e),每次 ListSelectionModel 資料有變化時,就會呼叫 valueChanged;也就是當 JTable 選擇改變時,會執行 valueChanged 函數。

// 加入監聽處理 jTable.getSelectionModel().addListSelectionListener(new ListSelectionHandle()); // 監聽處理 private class ListSelectionHandle implements ListSelectionListener { @Override public void valueChanged(ListSelectionEvent arg0) { // TODO Auto-generated method stub } }

取得被選擇的 row 值

  1. ListSelectionEvent.getValueIsAdjusting 返回是否處於選擇狀態,也就是是否還按著滑鼠左鍵。
  2. ListSelectionEvent.getFirstIndex 返回改變前及改變後的最小值。
  3. ListSelectionEvent.getLastIndex 返回改變前及改變後的最大值。
  4. ListSelectionModel.getMaxSelectionIndex 返回最後選擇的索引,如果選擇為空,則返回 -1。
  5. ListSelectionModel.getMinSelectionIndex 返回第一個選擇的索引,如果選擇為空,則返回 -1。
  6. JTable.getSelectedRow 返回第一個選定行的索引;如果沒有選定的行,則返回 -1。其實也就是呼叫 ListSelectionModel.getMinSelectionIndex。
  7. JTable.getSelectedRows 返回包含所有選定行索引的整數陣列;如果沒有選定的行,則返回一個空陣列。
  8. JTable.getSelectedRowCount 返回選定行數;如果沒有選定的行,則返回 0。

選擇模式

  1. 如果是 SINGLE_SELECTION mode 則直接使用 JTable.getSelectedRow 就可以取得所在 row 值。
  2. 如果是 SINGLE_INTERVAL_SELECTION 則可以呼叫 getMaxSelectionIndex 及 getMinSelectionIndex 來取得上下 row 值。
  3. 如果是 MULTIPLE_INTERVAL_SELECTION 就改用 JTable.getSelectedRows 來取得所有 row 值。

以上所講的都是 row 值選擇變化,而 column 值選擇變化則是藏在 TableColumnModel 裏的 ListSelectionModel,改天有空再來寫。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()