Swing/ClearSortingState のバックアップの現在との差分(No.5)
TITLE:TableRowSorterのSortKeysをクリアする
TableRowSorterのSortKeysをクリアする
Posted by terai at 2007-08-27- category: swing folder: ClearSortingState title: TableRowSorterのSortKeysをクリアする tags: [JTable, TableRowSorter, JTableHeader, MouseListener] author: aterai pubdate: 2007-08-27T12:33:13+09:00 description: JDK 6で導入されたTableRowSorterでの行ソートを、テーブルヘッダのShift+クリックでクリアします。 image:
概要
JDK 6
で導入されたTableRowSorter
での行ソートを、テーブルヘッダのShift+クリックでクリアします。
Screenshot
Advertisement
概要
JDK 6 で導入されたTableRowSorterでの行ソートを、テーブルヘッダの「Shift+クリック」でクリアします。- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
table.setAutoCreateRowSorter(true);
table.getTableHeader().addMouseListener(new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) {
final RowSorter<? extends TableModel> sorter = table.getRowSorter();
if(sorter==null || sorter.getSortKeys().size()==0) return;
JTableHeader h = (JTableHeader)e.getComponent();
if (sorter == null || sorter.getSortKeys().isEmpty()) {
return;
}
JTableHeader h = (JTableHeader) e.getComponent();
TableColumnModel columnModel = h.getColumnModel();
int viewColumn = columnModel.getColumnIndexAtX(e.getX());
if(viewColumn<0) return;
if (viewColumn < 0) {
return;
}
int column = columnModel.getColumn(viewColumn).getModelIndex();
if(column != -1 && e.isShiftDown()) {
if (column != -1 && e.isShiftDown()) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
sorter.setSortKeys(null);
}
});
}
}
});
解説
ヘッダにマウスリスナーを設定し、Shiftキーを押しながらのクリックの場合は、TableRowSorter#setSortKeysメソッドを使って、ソートキーを空にしています。解説
上記のサンプルでは、TableHeader
をShiftキーを押しながらマウスクリックしたときにTableRowSorter#setSortKeys
メソッドを使ってソートキーを空にすることでソート無しの状態に戻す機能を追加しています。
上記のサンプルでは、以下のような制限があります。
- ソートキーになっていないヘッダカラムをShift+クリックした場合でも、ソート状態をクリアする
行がソートされている場合は、ドラッグ&ドロップで行を入れ替え不可D&D機能は削除- ソートキーになっていないカラムヘッダをShift+クリックした場合でもソート状態をクリアしてしまう
- ドラッグ&ドロップでの入れ替えは無効化する必要がある