JavaTM 2 Platform
Standard Ed. 6

javax.swing
類別 RowSorter<M>

java.lang.Object
  繼承者 javax.swing.RowSorter<M>
型別參數:
M - 底層模型的型別
直接已知子類別:
DefaultRowSorter

public abstract class RowSorter<M>
extends Object

RowSorter 提供排序和過濾的基礎。創建和安裝了 RowSorter 之後,您幾乎不需要直接與它交互。有關 JTableRowSorter 具體實作,請參閱 TableRowSorter

RowSorter 的主要功能在於,提供兩個坐標系統之間的映射關係:視圖的映射關係(例如 JTable)和底層資料源(通常是模型)的映射關係。

視圖調用 RowSorter 的以下方法:

因為視圖大量使用了 convertRowIndexToModelconvertRowIndexToViewgetViewRowCount 方法,所以這些方法需要很快的運行快速。

RowSorter 通過 RowSorterListener 提供更改的通知。它發送兩種型別的通知:

RowSorter 實作與底層模型通常沒有一對一的映射關係,但它們也可以這樣做。例如,如果資料庫進行排序操作,則可以通過資料庫調用 toggleSortOrder (在後台執行緒上),並覆寫映射方法以返回傳入的參數。

RowSorter 的具體實作需要參考一個模型,比如 TableModelListModelJTableJList 之類別的視圖類別也將參考該模型。要避免排序依賴關係,RowSorter 實作不應該在模型上安裝偵聽器。而是在模型更改時,視圖類別調用 RowSorter。例如,如果在 TableModel 中更新了一行,則 JTable 調用 rowsUpdated。模型更改時,視圖可以調用任意以下方法:modelStructureChangedallRowsChangedrowsInsertedrowsDeletedrowsUpdated

從以下版本開始:
1.6
另請參見:
TableRowSorter

巢狀類別摘要
static class RowSorter.SortKey
          SortKey 描述特定列的排序順序。
 
建構子摘要
RowSorter()
          創建一個RowSorter
 
方法摘要
 void addRowSorterListener(RowSorterListener l)
          添加一個 RowSorterListener 來接收有關此 RowSorter 的通知。
abstract  void allRowsChanged()
          當底層模型的內容完全更改時,調用此方法。
abstract  int convertRowIndexToModel(int index)
          返回基於底層模型的 index 的位置。
abstract  int convertRowIndexToView(int index)
          返回基於視圖 index 的位置。
protected  void fireRowSorterChanged(int[] lastRowIndexToModel)
          通知偵聽器映射關係發生了更改。
protected  void fireSortOrderChanged()
          通知偵聽器排序順序發生了更改。
abstract  M getModel()
          返回底層模型。
abstract  int getModelRowCount()
          返回底層模型中的行數。
abstract  List<? extends RowSorter.SortKey> getSortKeys()
          返回當前排序鍵。
abstract  int getViewRowCount()
          返回視圖中的行數。
abstract  void modelStructureChanged()
          當底層模型結構完全更改時,調用此方法。
 void removeRowSorterListener(RowSorterListener l)
          移除一個 RowSorterListener
abstract  void rowsDeleted(int firstRow, int endRow)
          當行已經從指定範圍(包括)內的底層模型中被刪除時,調用此方法。
abstract  void rowsInserted(int firstRow, int endRow)
          當行已經插入到指定範圍(包括)內的底層模型時,調用此方法。
abstract  void rowsUpdated(int firstRow, int endRow)
          當行已經在指定範圍(包括)內的底層模型中被更改時,調用此方法。
abstract  void rowsUpdated(int firstRow, int endRow, int column)
          當行中的列已經在指定範圍內的底層模型中被更新時,調用此方法。
abstract  void setSortKeys(List<? extends RowSorter.SortKey> keys)
          設置當前排序鍵。
abstract  void toggleSortOrder(int column)
          顛倒指定列的排序順序。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

RowSorter

public RowSorter()
創建一個RowSorter

方法詳細資訊

getModel

public abstract M getModel()
返回底層模型。

返回:
底層模型

toggleSortOrder

public abstract void toggleSortOrder(int column)
顛倒指定列的排序順序。調用此方法時,由子類別提供具體行為。通常,如果指定列已經是主要排序列,則此方法將升序變為降序(或將降序變為升序);否則,使指定列成為主要排序列,並使用升序排序順序。如果指定列不可排序,則此方法沒有任何效果。

如果此方法導致更改排序順序和排序操作,則它將發送適當的 RowSorterListener 通知。

參數:
column - 要切換排序順序的列,就底層模型而言
拋出:
IndexOutOfBoundsException - 如果列超出底層模型的範圍

convertRowIndexToModel

public abstract int convertRowIndexToModel(int index)
返回基於底層模型的 index 的位置。也就是說,對於視圖坐標中的行 index,此方法返回基於底層模型的行索引。

參數:
index - 基於底層視圖的行索引
返回:
基於視圖的行索引
拋出:
IndexOutOfBoundsException - 如果 index 超出視圖的範圍

convertRowIndexToView

public abstract int convertRowIndexToView(int index)
返回基於視圖 index 的位置。也就是說,對於底層模型坐標中的行 index,此方法返回基於視圖的行索引。

參數:
index - 基於底層模型的行索引
返回:
返回基於視圖的行索引;如果索引已經被過濾出視圖,則返回 -1
拋出:
IndexOutOfBoundsException - 如果 index 超出模型的範圍

setSortKeys

public abstract void setSortKeys(List<? extends RowSorter.SortKey> keys)
設置當前排序鍵。

參數:
keys - 新的 SortKeysnull 是指定一個空列表的簡寫,表示視圖應該是未排序的。

getSortKeys

public abstract List<? extends RowSorter.SortKey> getSortKeys()
返回當前排序鍵。此方法必須返回一個非 null List,可以返回一個無法修改的 List。如果需要更改排序鍵,可創建所返回 List 的一個副本,更改該副本並使用新列表調用 setSortKeys

返回:
當前排序順序

getViewRowCount

public abstract int getViewRowCount()
返回視圖中的行數。如果該內容已被過濾,則此值可能不同於底層模型的行數。

返回:
視圖中的行數
另請參見:
getModelRowCount()

getModelRowCount

public abstract int getModelRowCount()
返回底層模型中的行數。

返回:
底層模型中的行數
另請參見:
getViewRowCount()

modelStructureChanged

public abstract void modelStructureChanged()
當底層模型結構完全更改時,調用此方法。例如,如果 TableModel 中的列數發生了更改,則此方法將被調用。

通常不調用此方法。此方法是公共的,允許視圖類別調用它。


allRowsChanged

public abstract void allRowsChanged()
當底層模型的內容完全更改時,調用此方法。表的結構相同,只有內容發生了更改。當對於其他方法來說標記此更改的代價太過昂貴時,通常使用此方法。

通常不調用此方法。此方法是公共的,允許視圖類別調用它。


rowsInserted

public abstract void rowsInserted(int firstRow,
                                  int endRow)
當行已經插入到指定範圍(包括)內的底層模型時,調用此方法。

參數指定有效範圍的索引。第一個參數是基於更改之前的模型的,必須小於等於更改之前的模型的大小。第二個參數是基於更改之後的模型的,必須小於更改之後的模型的大小。例如,如果有一個 5 行的模型並在該模型的尾部添加 3 個項,則其索引為 5、7。

通常不調用此方法。此方法是公共的,允許視圖類別調用它。

參數:
firstRow - 第一行
endRow - 最後一行
拋出:
IndexOutOfBoundsException - 如果任一參數無效,或者 firstRow > endRow

rowsDeleted

public abstract void rowsDeleted(int firstRow,
                                 int endRow)
當行已經從指定範圍(包括)內的底層模型中被刪除時,調用此方法。

參數指定有效範圍的索引,其基於更改之前的模型。例如,如果有一個 5 行的模型並從模型的尾部刪除 3 個項,則其索引為 2、4。

通常不調用此方法。此方法是公共的,允許視圖類別調用它。

參數:
firstRow - 第一行
endRow - 最後一行
拋出:
IndexOutOfBoundsException - 如果任一參數超出模型更改之前的範圍,或者 firstRow > endRow

rowsUpdated

public abstract void rowsUpdated(int firstRow,
                                 int endRow)
當行已經在指定範圍(包括)內的底層模型中被更改時,調用此方法。

通常不調用此方法。此方法是公共的,允許視圖類別調用它。

參數:
firstRow - 第一行,就底層模型而言
endRow - 最後一行,就底層模型而言
拋出:
IndexOutOfBoundsException - 如果任一參數超出模型更改之前的範圍,或者 firstRow > endRow

rowsUpdated

public abstract void rowsUpdated(int firstRow,
                                 int endRow,
                                 int column)
當行中的列已經在指定範圍內的底層模型中被更新時,調用此方法。

通常不調用此方法。此方法是公共的,允許視圖類別調用它。

參數:
firstRow - 第一行,就底層模型而言
endRow - 最後一行,就底層模型而言
column - 已更改的列,就底層模型而言
拋出:
IndexOutOfBoundsException - 如果任一參數超出底層模型更改之後的範圍,firstRow > endRow 或者 column 超出底層模型的範圍

addRowSorterListener

public void addRowSorterListener(RowSorterListener l)
添加一個 RowSorterListener 來接收有關此 RowSorter 的通知。如果多次添加相同的偵聽器,則它將接收多個通知。如果 lnull,則不執行任何操作。

參數:
l - RowSorterListener

removeRowSorterListener

public void removeRowSorterListener(RowSorterListener l)
移除一個 RowSorterListener。如果 lnull,則不執行任何操作。

參數:
l - RowSorterListener

fireSortOrderChanged

protected void fireSortOrderChanged()
通知偵聽器排序順序發生了更改。


fireRowSorterChanged

protected void fireRowSorterChanged(int[] lastRowIndexToModel)
通知偵聽器映射關係發生了更改。

參數:
lastRowIndexToModel - 模型索引到排序之前視圖索引的映射關係,可以為 null

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only