JavaTM 2 Platform
Standard Ed. 6

javax.swing
類別 DefaultRowSorter<M,I>

java.lang.Object
  繼承者 javax.swing.RowSorter<M>
      繼承者 javax.swing.DefaultRowSorter<M,I>
型別參數:
M - 模型的型別
I - 傳遞給 RowFilter 的標識符型別
直接已知子類別:
TableRowSorter

public abstract class DefaultRowSorter<M,I>
extends RowSorter<M>

RowSorter 的一個實作,它圍繞基於網格的資料模型提供排序和過濾操作。除了創建和安裝 RowSorter 之外,幾乎不需要直接與它交互。有關 JTableRowSorter 具體實作,請參閱 TableRowSorter

排序操作依次根據當前的 SortKey 完成。如果兩個物件相等(Comparator 對於列返回 0),則使用下一個 SortKey。如果沒有剩餘的 SortKey 或者順序為 UNSORTED,則使用模型中行的順序。

每一列的排序操作通過 Comparator 來完成,可以使用 setComparator 方法來指定 Comparator。如果尚未指定 Comparator,則先對底層物件調用 toString,再對其結果調用 Collator.getInstance(),使用所返回的 ComparatorComparator 不傳遞 nullnull 值被視為在非 null 值之前出現,兩個 null 值被認為是相等的。

如果指定的 Comparator 將其參數強制轉換為一個模型沒有提供的型別,則對資料進行排序時將拋出 ClassCastException

除了排序操作,DefaultRowSorter 還提供過濾行的能力。過濾操作通過用 setRowFilter 方法指定的 RowFilter 來完成。如果沒有指定過濾器,則包含所有行。

預設情況下,行是未排序的(與模型相同),每一列都是可排序的。預設的 Comparator 記錄在子類別中(例如,TableRowSorter)。

如果底層模型結構更改(調用了 modelStructureChanged 方法),則以下內容被重置為預設值:按列的 Comparator、當前排序順序、每一列是否都是可排序的。要找到預設的 Comparator,請參閱具體實作(例如,TableRowSorter)。預設的排序順序是未排序的(與模型相同),預設情況下列是可排序的。

如果底層模型結構更改(調用了 modelStructureChanged 方法),則以下內容被重置為預設值:按列的 Comparator、當前排序順序、某一列是否是可排序的。

DefaultRowSorter 是一個抽象類別。通過調用 setModelWrapper,具體子類別必須提供對底層資料的存取。調用建構子之後必須立即調用 setModelWrapper 方法,最好是從子類別的建構子中進行調用。如果使用 DefaultRowSorter 時沒有指定 ModelWrapper,則會導致不確定的行為。

DefaultRowSorter 有兩種形式的型別參數。第一種型別參數對應於模型的類別,例如 DefaultTableModel。第二種型別參數對應於傳遞給 RowFilter 的標識符的類別。有關型別參數的詳細資訊,請參閱 TableRowSorterRowFilter

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

巢狀類別摘要
protected static class DefaultRowSorter.ModelWrapper<M,I>
          DefaultRowSorter.ModelWrapper 負責提供由 DefaultRowSorter 進行排序的資料。
 
從類別 javax.swing.RowSorter 繼承的巢狀類別/介面
RowSorter.SortKey
 
建構子摘要
DefaultRowSorter()
          創建一個空 DefaultRowSorter
 
方法摘要
 void allRowsChanged()
          當底層模型的內容完全更改時,調用此方法。
 int convertRowIndexToModel(int index)
          返回基於底層模型的 index 的位置。
 int convertRowIndexToView(int index)
          返回基於視圖 index 的位置。
 Comparator<?> getComparator(int column)
          返回指定列的 Comparator
 int getMaxSortKeys()
          返回排序鍵的最大數量。
 M getModel()
          返回底層模型。
 int getModelRowCount()
          返回底層模型中的行數。
protected  DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
          返回模型外覆器,它提供將要進行排序和過濾的資料。
 RowFilter<? super M,? super I> getRowFilter()
          返回用於確定哪些行(如果有)應該在視圖中隱藏的過濾器。
 List<? extends RowSorter.SortKey> getSortKeys()
          返回當前排序鍵。
 boolean getSortsOnUpdates()
          如果底層模型更新時應該進行排序,則返回 true;否則返回 false。
 int getViewRowCount()
          返回視圖中的行數。
 boolean isSortable(int column)
          如果指定的列可排序,則返回 true;否則返回 false。
 void modelStructureChanged()
          當底層模型結構完全更改時,調用此方法。
 void rowsDeleted(int firstRow, int endRow)
          當行已經從指定範圍(包括)內的底層模型中被刪除時,調用此方法。
 void rowsInserted(int firstRow, int endRow)
          當行已經插入到指定範圍(包括)內的底層模型時,調用此方法。
 void rowsUpdated(int firstRow, int endRow)
          當行已經在指定範圍(包括)內的底層模型中被更改時,調用此方法。
 void rowsUpdated(int firstRow, int endRow, int column)
          當行中的列已經在指定範圍內的底層模型中被更新時,調用此方法。
 void setComparator(int column, Comparator<?> comparator)
          設置對指定列進行排序時要使用的 Comparator
 void setMaxSortKeys(int max)
          設置排序鍵的最大數量。
protected  void setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
          設置模型外覆器,它提供將要進行排序和過濾的資料。
 void setRowFilter(RowFilter<? super M,? super I> filter)
          設置用於確定哪些行(如果有)應該在視圖中隱藏的過濾器。
 void setSortable(int column, boolean sortable)
          設置指定列是否可排序。
 void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
          設置排序鍵。
 void setSortsOnUpdates(boolean sortsOnUpdates)
          如果為 true,則指定應該在底層模型更新(調用了 rowsUpdated)時進行排序。
 void sort()
          根據當前正在排序的列的排序鍵以及與此排序器關聯的過濾器(如果有)對視圖中的行進行排序和過濾。
 void toggleSortOrder(int column)
          如果指定列已經是主要排序列,則反轉排序順序(將升序變為降序,或將降序變為升序);否則,使指定列成為主要排序列,並使用升序排序順序。
protected  boolean useToString(int column)
          返回排序過程中進行比較之前是否要將值轉換為字元串。
 
從類別 javax.swing.RowSorter 繼承的方法
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

DefaultRowSorter

public DefaultRowSorter()
創建一個空 DefaultRowSorter

方法詳細資訊

setModelWrapper

protected final void setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
設置模型外覆器,它提供將要進行排序和過濾的資料。

參數:
modelWrapper - 負責提供要進行排序和過濾的資料的模型外覆器
拋出:
IllegalArgumentException - 如果 modelWrappernull

getModelWrapper

protected final DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
返回模型外覆器,它提供將要進行排序和過濾的資料。

返回:
負責提供要進行排序和過濾的資料的模型外覆器

getModel

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

指定者:
類別 RowSorter<M> 中的 getModel
返回:
底層模型

setSortable

public void setSortable(int column,
                        boolean sortable)
設置指定列是否可排序。只有調用 toggleSortOrder 時才檢查指定的值。通過直接設置排序鍵,仍然可以對已標記為不可排序的列進行排序。預設值為 true。

參數:
column - 要啟用排序或禁用排序的列,就底層模型而言
sortable - 指定的列是否可排序
拋出:
IndexOutOfBoundsException - 如果 column 超出模型的範圍
另請參見:
toggleSortOrder(int), setSortKeys(java.util.List)

isSortable

public boolean isSortable(int column)
如果指定的列可排序,則返回 true;否則返回 false。

參數:
column - 要檢查排序的列,就底層模型而言
返回:
如果該列可排序,則返回 true
拋出:
IndexOutOfBoundsException - 如果 column 超出底層模型的範圍

setSortKeys

public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
設置排序鍵。此方法創建所提供 List 的一個副本;對所提供 List 的後續更改不影響此 DefaultRowSorter。如果排序鍵已更改,則此方法觸發一個排序。

指定者:
類別 RowSorter<M> 中的 setSortKeys
參數:
sortKeys - 新的 SortKeynull 是指定一個空列表的簡單表示方法,表示視圖應該是未排序的。
拋出:
IllegalArgumentException - 如果 sortKey 中的任一值為 null,或者有超出模型範圍的列索引

getSortKeys

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

指定者:
類別 RowSorter<M> 中的 getSortKeys
返回:
當前排序順序

setMaxSortKeys

public void setMaxSortKeys(int max)
設置排序鍵的最大數量。排序鍵的數量決定了排序時如何解決相等的值。例如,假定創建了一個表格行排序器並對其調用 setMaxSortKeys(2)。使用者單擊列 1 表頭,使表格行按照列 1 中的項進行排序。然後,使用者單擊列 2 的表頭,使表格按照列 2 中的項進行排序;如果列 2 中的所有項都相等,則按照列 1 中的項對那些特定行進行排序。在這種情況下,我們說行首先在列 2 上進行排序,其次在列 1 上進行排序。如果使用者單擊列 3 的表頭,則首先在列 3 上對項進行排序,其次在列 2 上進行排序。由於排序鍵的最大數量已經通過 setMaxSortKeys 被設置為 2,所以列 1 不再影響順序。

排序鍵的最大數量由 toggleSortOrder 強制指定。可以通過直接調用 setSortKeys 指定更多的排序鍵,並且這些排序鍵都將被遵守。但是,如果之後調用了 toggleSortOrder,則將強制指定排序鍵的最大數量。預設值為 3。

參數:
max - 排序鍵的最大數量
拋出:
IllegalArgumentException - 如果 max < 1

getMaxSortKeys

public int getMaxSortKeys()
返回排序鍵的最大數量。

返回:
排序鍵的最大數量

setSortsOnUpdates

public void setSortsOnUpdates(boolean sortsOnUpdates)
如果為 true,則指定應該在底層模型更新(調用了 rowsUpdated)時進行排序。例如,如果為 true 並且使用者編輯了一個條目,則該項在視圖中的位置可能改變。預設值為 false。

參數:
sortsOnUpdates - 是否在發生更新事件時進行排序

getSortsOnUpdates

public boolean getSortsOnUpdates()
如果底層模型更新時應該進行排序,則返回 true;否則返回 false。

返回:
模型更新時是否進行排序

setRowFilter

public void setRowFilter(RowFilter<? super M,? super I> filter)
設置用於確定哪些行(如果有)應該在視圖中隱藏的過濾器。過濾器在排序之前應用。null 值表示應該套件括模型中的所有值。

將包裹底層模型的 Entry 傳遞給 RowFilterinclude 方法。Entry 的列數對應於 ModelWrapper 的列數。標識符也取自該 ModelWrapper

此方法將觸發排序。

參數:
filter - 用於確定應該套件括哪些條目的過濾器

getRowFilter

public RowFilter<? super M,? super I> getRowFilter()
返回用於確定哪些行(如果有)應該在視圖中隱藏的過濾器。

返回:
過濾器

toggleSortOrder

public void toggleSortOrder(int column)
如果指定列已經是主要排序列,則反轉排序順序(將升序變為降序,或將降序變為升序);否則,使指定列成為主要排序列,並使用升序排序順序。如果指定列不可排序,則此方法沒有任何效果。

指定者:
類別 RowSorter<M> 中的 toggleSortOrder
參數:
column - 要變為主要排序列的列索引,就底層模型而言
拋出:
IndexOutOfBoundsException - 如果列超出底層模型的範圍
另請參見:
setSortable(int,boolean), setMaxSortKeys(int)

convertRowIndexToView

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

指定者:
類別 RowSorter<M> 中的 convertRowIndexToView
參數:
index - 基於底層模型的行索引
返回:
返回基於視圖的行索引;如果索引已經被過濾出視圖,則返回 -1
拋出:
IndexOutOfBoundsException - 如果 index 超出模型的範圍

convertRowIndexToModel

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

指定者:
類別 RowSorter<M> 中的 convertRowIndexToModel
參數:
index - 基於底層視圖的行索引
返回:
基於視圖的行索引
拋出:
IndexOutOfBoundsException - 如果 index 超出視圖的範圍

sort

public void sort()
根據當前正在排序的列的排序鍵以及與此排序器關聯的過濾器(如果有)對視圖中的行進行排序和過濾。空 sortKeys 列表表示視圖應該未排序,與模型相同。

另請參見:
setRowFilter(javax.swing.RowFilter), setSortKeys(java.util.List)

useToString

protected boolean useToString(int column)
返回排序過程中進行比較之前是否要將值轉換為字元串。如果為 true,則將使用 ModelWrapper.getStringValueAt;否則,將使用 ModelWrapper.getValueAt。由子類別(比如 TableRowSorter)決定是否在其 ModelWrapper 實作中遵守此值。

參數:
column - 要測試的列的索引,就底層模型而言
拋出:
IndexOutOfBoundsException - 如果 column 無效

setComparator

public void setComparator(int column,
                          Comparator<?> comparator)
設置對指定列進行排序時要使用的 Comparator。此方法不會觸發排序。如果想要在設置比較器之後進行排序,則需要顯式地調用 sort

參數:
column - 要應用 Comparator 的列的索引,就底層模型而言
comparator - 要使用的 Comparator
拋出:
IndexOutOfBoundsException - 如果 column 超出底層模型的範圍

getComparator

public Comparator<?> getComparator(int column)
返回指定列的 Comparator。如果沒有為列指定 Comparator,則此方法將返回 null

參數:
column - 要獲取 Comparator 的列,就底層模型而言
返回:
指定列的 Comparator
拋出:
IndexOutOfBoundsException - 如果 column 超出底層模型的範圍

getViewRowCount

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

指定者:
類別 RowSorter<M> 中的 getViewRowCount
返回:
視圖中的行數
另請參見:
RowSorter.getModelRowCount()

getModelRowCount

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

指定者:
類別 RowSorter<M> 中的 getModelRowCount
返回:
底層模型中的行數
另請參見:
RowSorter.getViewRowCount()

modelStructureChanged

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

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

指定者:
類別 RowSorter<M> 中的 modelStructureChanged

allRowsChanged

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

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

指定者:
類別 RowSorter<M> 中的 allRowsChanged

rowsInserted

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

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

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

指定者:
類別 RowSorter<M> 中的 rowsInserted
參數:
firstRow - 第一行
endRow - 最後一行
拋出:
IndexOutOfBoundsException - 如果任一參數無效,或者 firstRow > endRow

rowsDeleted

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

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

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

指定者:
類別 RowSorter<M> 中的 rowsDeleted
參數:
firstRow - 第一行
endRow - 最後一行
拋出:
IndexOutOfBoundsException - 如果任一參數超出模型更改之前的範圍,或者 firstRow > endRow

rowsUpdated

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

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

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

rowsUpdated

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

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

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

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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