|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.swing.RowSorter<M> javax.swing.DefaultRowSorter<M,I>
M
- 模型的型別I
- 傳遞給 RowFilter
的標識符型別public abstract class DefaultRowSorter<M,I>
RowSorter
的一個實作,它圍繞基於網格的資料模型提供排序和過濾操作。除了創建和安裝 RowSorter
之外,幾乎不需要直接與它交互。有關 JTable
的 RowSorter
具體實作,請參閱 TableRowSorter
。
排序操作依次根據當前的 SortKey
完成。如果兩個物件相等(Comparator
對於列返回 0),則使用下一個 SortKey
。如果沒有剩餘的 SortKey
或者順序為 UNSORTED
,則使用模型中行的順序。
每一列的排序操作通過 Comparator
來完成,可以使用 setComparator
方法來指定 Comparator
。如果尚未指定 Comparator
,則先對底層物件調用 toString
,再對其結果調用 Collator.getInstance()
,使用所返回的 Comparator
。Comparator
不傳遞 null
。null
值被視為在非 null
值之前出現,兩個 null
值被認為是相等的。
如果指定的 Comparator
將其參數強制轉換為一個模型沒有提供的型別,則對資料進行排序時將拋出 ClassCastException
。
除了排序操作,DefaultRowSorter
還提供過濾行的能力。過濾操作通過用 setRowFilter
方法指定的 RowFilter
來完成。如果沒有指定過濾器,則包含所有行。
預設情況下,行是未排序的(與模型相同),每一列都是可排序的。預設的 Comparator
記錄在子類別中(例如,TableRowSorter
)。
如果底層模型結構更改(調用了 modelStructureChanged
方法),則以下內容被重置為預設值:按列的 Comparator
、當前排序順序、每一列是否都是可排序的。要找到預設的 Comparator
,請參閱具體實作(例如,TableRowSorter
)。預設的排序順序是未排序的(與模型相同),預設情況下列是可排序的。
如果底層模型結構更改(調用了 modelStructureChanged
方法),則以下內容被重置為預設值:按列的 Comparator
、當前排序順序、某一列是否是可排序的。
DefaultRowSorter
是一個抽象類別。通過調用 setModelWrapper
,具體子類別必須提供對底層資料的存取。調用建構子之後必須立即調用 setModelWrapper
方法,最好是從子類別的建構子中進行調用。如果使用 DefaultRowSorter
時沒有指定 ModelWrapper
,則會導致不確定的行為。
DefaultRowSorter
有兩種形式的型別參數。第一種型別參數對應於模型的類別,例如 DefaultTableModel
。第二種型別參數對應於傳遞給 RowFilter
的標識符的類別。有關型別參數的詳細資訊,請參閱 TableRowSorter
和 RowFilter
。
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 |
建構子詳細資訊 |
---|
public DefaultRowSorter()
DefaultRowSorter
。
方法詳細資訊 |
---|
protected final void setModelWrapper(DefaultRowSorter.ModelWrapper<M,I> modelWrapper)
modelWrapper
- 負責提供要進行排序和過濾的資料的模型外覆器
IllegalArgumentException
- 如果 modelWrapper
為 null
protected final DefaultRowSorter.ModelWrapper<M,I> getModelWrapper()
public final M getModel()
RowSorter<M>
中的 getModel
public void setSortable(int column, boolean sortable)
toggleSortOrder
時才檢查指定的值。通過直接設置排序鍵,仍然可以對已標記為不可排序的列進行排序。預設值為 true。
column
- 要啟用排序或禁用排序的列,就底層模型而言sortable
- 指定的列是否可排序
IndexOutOfBoundsException
- 如果 column
超出模型的範圍toggleSortOrder(int)
,
setSortKeys(java.util.List extends javax.swing.RowSorter.SortKey>)
public boolean isSortable(int column)
column
- 要檢查排序的列,就底層模型而言
IndexOutOfBoundsException
- 如果 column
超出底層模型的範圍public void setSortKeys(List<? extends RowSorter.SortKey> sortKeys)
List
的一個副本;對所提供 List
的後續更改不影響此 DefaultRowSorter
。如果排序鍵已更改,則此方法觸發一個排序。
RowSorter<M>
中的 setSortKeys
sortKeys
- 新的 SortKey
;null
是指定一個空列表的簡單表示方法,表示視圖應該是未排序的。
IllegalArgumentException
- 如果 sortKey
中的任一值為 null,或者有超出模型範圍的列索引public List<? extends RowSorter.SortKey> getSortKeys()
非 null List
。如果需要更改排序鍵,可創建所返回 List
的一個副本,更改該副本並使用新列表調用 setSortKeys
。
RowSorter<M>
中的 getSortKeys
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
< 1public int getMaxSortKeys()
public void setSortsOnUpdates(boolean sortsOnUpdates)
rowsUpdated
)時進行排序。例如,如果為 true 並且使用者編輯了一個條目,則該項在視圖中的位置可能改變。預設值為 false。
sortsOnUpdates
- 是否在發生更新事件時進行排序public boolean getSortsOnUpdates()
public void setRowFilter(RowFilter<? super M,? super I> filter)
null
值表示應該套件括模型中的所有值。
將包裹底層模型的 Entry
傳遞給 RowFilter
的 include
方法。Entry
的列數對應於 ModelWrapper
的列數。標識符也取自該 ModelWrapper
。
此方法將觸發排序。
filter
- 用於確定應該套件括哪些條目的過濾器public RowFilter<? super M,? super I> getRowFilter()
public void toggleSortOrder(int column)
RowSorter<M>
中的 toggleSortOrder
column
- 要變為主要排序列的列索引,就底層模型而言
IndexOutOfBoundsException
- 如果列超出底層模型的範圍setSortable(int,boolean)
,
setMaxSortKeys(int)
public int convertRowIndexToView(int index)
index
的位置。也就是說,對於底層模型坐標中的行 index
,此方法返回基於視圖的行索引。
RowSorter<M>
中的 convertRowIndexToView
index
- 基於底層模型的行索引
IndexOutOfBoundsException
- 如果 index
超出模型的範圍public int convertRowIndexToModel(int index)
index
的位置。也就是說,對於視圖坐標中的行 index
,此方法返回基於底層模型的行索引。
RowSorter<M>
中的 convertRowIndexToModel
index
- 基於底層視圖的行索引
IndexOutOfBoundsException
- 如果 index
超出視圖的範圍public void sort()
sortKeys
列表表示視圖應該未排序,與模型相同。
setRowFilter(javax.swing.RowFilter super M, ? super I>)
,
setSortKeys(java.util.List extends javax.swing.RowSorter.SortKey>)
protected boolean useToString(int column)
ModelWrapper.getStringValueAt
;否則,將使用 ModelWrapper.getValueAt
。由子類別(比如 TableRowSorter
)決定是否在其 ModelWrapper
實作中遵守此值。
column
- 要測試的列的索引,就底層模型而言
IndexOutOfBoundsException
- 如果 column
無效public void setComparator(int column, Comparator<?> comparator)
Comparator
。此方法不會觸發排序。如果想要在設置比較器之後進行排序,則需要顯式地調用 sort
。
column
- 要應用 Comparator
的列的索引,就底層模型而言comparator
- 要使用的 Comparator
IndexOutOfBoundsException
- 如果 column
超出底層模型的範圍public Comparator<?> getComparator(int column)
Comparator
。如果沒有為列指定 Comparator
,則此方法將返回 null
。
column
- 要獲取 Comparator
的列,就底層模型而言
Comparator
IndexOutOfBoundsException
- 如果 column
超出底層模型的範圍public int getViewRowCount()
RowSorter<M>
中的 getViewRowCount
RowSorter.getModelRowCount()
public int getModelRowCount()
RowSorter<M>
中的 getModelRowCount
RowSorter.getViewRowCount()
public void modelStructureChanged()
TableModel
中的列數發生了更改,則此方法將被調用。
通常不調用此方法。此方法是公共的,允許視圖類別調用它。
RowSorter<M>
中的 modelStructureChanged
public void allRowsChanged()
通常不調用此方法。此方法是公共的,允許視圖類別調用它。
RowSorter<M>
中的 allRowsChanged
public void rowsInserted(int firstRow, int endRow)
參數指定有效範圍的索引。第一個參數是基於更改之前的模型的,必須小於等於更改之前的模型的大小。第二個參數是基於更改之後的模型的,必須小於更改之後的模型的大小。例如,如果有一個 5 行的模型並在該模型的尾部添加 3 個項,則其索引為 5、7。
通常不調用此方法。此方法是公共的,允許視圖類別調用它。
RowSorter<M>
中的 rowsInserted
firstRow
- 第一行endRow
- 最後一行
IndexOutOfBoundsException
- 如果任一參數無效,或者 firstRow
> endRow
public void rowsDeleted(int firstRow, int endRow)
參數指定有效範圍的索引,其基於更改之前的模型。例如,如果有一個 5 行的模型並從模型的尾部刪除 3 個項,則其索引為 2、4。
通常不調用此方法。此方法是公共的,允許視圖類別調用它。
RowSorter<M>
中的 rowsDeleted
firstRow
- 第一行endRow
- 最後一行
IndexOutOfBoundsException
- 如果任一參數超出模型更改之前的範圍,或者 firstRow
> endRow
public void rowsUpdated(int firstRow, int endRow)
通常不調用此方法。此方法是公共的,允許視圖類別調用它。
RowSorter<M>
中的 rowsUpdated
firstRow
- 第一行,就底層模型而言endRow
- 最後一行,就底層模型而言
IndexOutOfBoundsException
- 如果任一參數超出模型更改之前的範圍,或者 firstRow
> endRow
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。