JavaTM 2 Platform
Standard Ed. 6

javax.swing.table
類別 TableRowSorter<M extends TableModel>

java.lang.Object
  繼承者 javax.swing.RowSorter<M>
      繼承者 javax.swing.DefaultRowSorter<M,Integer>
          繼承者 javax.swing.table.TableRowSorter<M>
型別參數:
M - 模型的型別,必須為 TableModel 的一個實作

public class TableRowSorter<M extends TableModel>
extends DefaultRowSorter<M,Integer>

RowSorter 的一個實作,它使用 TableModel 提供排序和過濾操作。下面的例子顯示了向 JTable 添加排序操作:

TableModel myModel = createMyTableModel();
JTable table = new JTable(myModel);
table.setRowSorter(new TableRowSorter(myModel));
 
此類別將完成所有連線操作(wiring),從而當使用者做出適當的行為(比如單擊列標題)時,表將進行直觀的排序。

JTable 的基於行的方法和 JTable 的選擇模型參考視圖而不是底層模型。因此,有必要在兩者之前進行轉換。例如,要獲取基於 myModel 的選擇,需要轉換索引:

int[] selection = table.getSelectedRows();
for (int i = 0; i < selection.length; i++) {
selection[i] = table.convertRowIndexToModel(selection[i]);
   }
 
類似地,要在基於底層模型坐標的 JTable 中選擇一行,執行以下相反的操作:
table.setRowSelectionInterval(table.convertRowIndexToView(row),
table.convertRowIndexToView(row));
 

前一個例子假定不能進行過濾操作。如果能夠進行過濾,則對於在視圖中不可見的位置,convertRowIndexToView 將返回 -1。

TableRowSorter 使用 Comparator 進行比較。下文定義了如何為列選擇 Comparator

  1. 如果已經通過 setComparator 方法為列指定了 Comparator,則使用它。
  2. 如果 getColumnClass 返回的列類別是 String,則使用 Collator.getInstance() 返回的 Comparator
  3. 如果列類別實作 Comparable,則使用調用 compareTo 方法的 Comparator
  4. 如果已經指定了 TableStringConverter,則使用它將值轉換為 String,然後使用 Collator.getInstance() 返回的 Comparator
  5. 否則,先在物件上調用 toString,再對結果調用 Collator.getInstance(),使用所返回的 Comparator

除了排序操作,TableRowSorter 還提供過濾操作。使用 setFilter 方法指定過濾器。下例將只顯示包含字元串“foo”的行:

TableModel myModel = createMyTableModel();
TableRowSorter sorter = new TableRowSorter(myModel);
sorter.setRowFilter(RowFilter.regexFilter(".*foo.*"));
JTable table = new JTable(myModel);
table.setRowSorter(sorter);
 

如果底層模型結構發生了更改(調用了 modelStructureChanged 方法),則以下值將被重置為其預設值:列的 Comparator,當前排序順序以及每一列是否可排序。預設的排序順序是自然排序(與模型相同),並且預設情況下列是可排序的。

TableRowSorter 有一個形式型別參數:模型的型別。傳入完全對應於模型的型別允許基於模型進行過濾,而無需強制轉換。有關此情況的例子,請參閱 RowFilter 文檔。

警告: DefaultTableModel 返回 Object 的列類別。這種情況下將使用 toString 完成所有比較。這將產生不必要的昂貴開銷。如果列只包含一種值型別,比如 Integer,則應該覆寫 getColumnClass 並返回適當的 Class。這將明顯增強此類別的性能。

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

巢狀類別摘要
 
從類別 javax.swing.DefaultRowSorter 繼承的巢狀類別/介面
DefaultRowSorter.ModelWrapper<M,I>
 
從類別 javax.swing.RowSorter 繼承的巢狀類別/介面
RowSorter.SortKey
 
建構子摘要
TableRowSorter()
          使用空模型創建一個 TableRowSorter
TableRowSorter(M model)
          使用 model 作為底層 TableModel 創建一個 TableRowSorter
 
方法摘要
 Comparator<?> getComparator(int column)
          返回指定列的 Comparator
 TableStringConverter getStringConverter()
          返回負責將值從模型轉換為字元串的物件。
 void setModel(M model)
          將 TableModel 設置為此 TableRowSorter 要使用的底層模型。
 void setStringConverter(TableStringConverter stringConverter)
          設置負責將值從模型轉換為字元串的物件。
protected  boolean useToString(int column)
          返回排序過程中進行比較之前是否要將值轉換為字元串。
 
從類別 javax.swing.DefaultRowSorter 繼承的方法
allRowsChanged, convertRowIndexToModel, convertRowIndexToView, getMaxSortKeys, getModel, getModelRowCount, getModelWrapper, getRowFilter, getSortKeys, getSortsOnUpdates, getViewRowCount, isSortable, modelStructureChanged, rowsDeleted, rowsInserted, rowsUpdated, rowsUpdated, setComparator, setMaxSortKeys, setModelWrapper, setRowFilter, setSortable, setSortKeys, setSortsOnUpdates, sort, toggleSortOrder
 
從類別 javax.swing.RowSorter 繼承的方法
addRowSorterListener, fireRowSorterChanged, fireSortOrderChanged, removeRowSorterListener
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

TableRowSorter

public TableRowSorter()
使用空模型創建一個 TableRowSorter


TableRowSorter

public TableRowSorter(M model)
使用 model 作為底層 TableModel 創建一個 TableRowSorter

參數:
model - 要使用的底層 TableModelnull 被視為空模型。
方法詳細資訊

setModel

public void setModel(M model)
TableModel 設置為此 TableRowSorter 要使用的底層模型。可以用 null 值設置空模型。

參數:
model - 要使用的底層模型,或者 null

setStringConverter

public void setStringConverter(TableStringConverter stringConverter)
設置負責將值從模型轉換為字元串的物件。如果為非 null,則此方法用於將所有不具有已註冊 Comparator 的物件值轉換為字元串。

參數:
stringConverter - 負責將值從模型轉換為字元串的物件

getStringConverter

public TableStringConverter getStringConverter()
返回負責將值從模型轉換為字元串的物件。

返回:
負責將值轉換為字元串的物件。

getComparator

public Comparator<?> getComparator(int column)
返回指定列的 Comparator。如果沒有使用 setComparator 方法指定 Comparator,那麼將基於指定列的列類別(TableModel.getColumnClass)返回 Comparator。如果列類別為 String,則返回 Collator.getInstance。如果列類別實作 Comparable,則返回調用 compareTo 方法的私有 Comparator。否則,返回 Collator.getInstance

覆寫:
類別 DefaultRowSorter<M extends TableModel,Integer> 中的 getComparator
參數:
column - 要獲取 Comparator 的列,就底層模型而言
返回:
指定列的 Comparator
拋出:
IndexOutOfBoundsException - 如果 column 超出底層模型的範圍

useToString

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

覆寫:
類別 DefaultRowSorter<M extends TableModel,Integer> 中的 useToString
參數:
column - 要測試的列的索引,就底層模型而言
拋出:
IndexOutOfBoundsException - 如果 column 無效

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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