Swing/MultisortHeaderRenderer のバックアップ(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/MultisortHeaderRenderer へ行く。
- title: JTableの複数キーを使ったソートをヘッダに表示する tags: [JTable, JTableHeader, TableRowSorter, Icon] author: aterai pubdate: 2013-10-14T00:15:08+09:00 description: JTableの複数キーを使ったソートの状態をヘッダ上に別途表示します。
概要
JTable
の複数キーを使ったソートの状態をヘッダ上に別途表示します。
Screenshot
Advertisement
サンプルコード
class MultisortHeaderRenderer implements TableCellRenderer {
@Override public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
String str = Objects.toString(value, "");
if (table.getRowSorter() != null) {
List<?> keys = table.getRowSorter().getSortKeys();
int max = keys.size();
for (int i = 0; i < max; i++) {
TableRowSorter.SortKey sortKey = (TableRowSorter.SortKey) keys.get(i);
if (column == sortKey.getColumn()) {
String k = sortKey.getSortOrder() == SortOrder.ASCENDING ? "\u25B4 "
: "\u25BE ";
str = String.format("<html>%s<small color='gray'>%s%d", str, k, i + 1);
}
}
}
TableCellRenderer r = table.getTableHeader().getDefaultRenderer();
return r.getTableCellRendererComponent(
table, str, isSelected, hasFocus, row, column);
}
}
View in GitHub: Java, Kotlin解説
JTable
のTableRowSorter
は、デフォルトで最大数3
のSortKey
が設定されているため、複数キーを使ったソートが可能ですが、JTableHeader
には第一ソートキーの状態だけが表示されます。
このサンプルでは、ヘッダのセルレンダラー内部でソートキーを取得し、その状態を文字列にしてヘッダタイトルに追記表示することで識別できるようにしています。
- Multisort Table Header Cell Renderer « Java Tips Weblog
- 第二キー以下を薄く表示するサンプルがあります。
Windows 7
でデフォルトのWindowsLookAndFeel
が使用するヘッダレンダラー(ソートのマークが文字列の右ではなく上部に表示される)と併用したい場合、少し面倒な修正が必要になります。- この修正を行ったレンダラーを他の
LookAndFeel
で使用すると第一ソートキーが非表示になります。
- この修正を行ったレンダラーを他の