JTableの複数キーを使ったソートをヘッダに表示する
Total: 6244
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
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, "");
RowSorter<? extends TableModel> sorter = table.getRowSorter();
if (Objects.nonNull(sorter)) {
List<? extends TableRowSorter.SortKey> keys = sorter.getSortKeys();
for (int i = 0; i < keys.size(); i++) {
TableRowSorter.SortKey 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
が設定可能- このため複数キーを使ったソートを実行できる
- ただしソートアイコンは第
1
ソートキーの状態のみJTableHeader
に表示される
- 上記サンプル
JTableHeader
のセルレンダラーでソートキーを取得し、その状態を文字列にしてヘッダタイトルに追記表示することで存在するソートキーをすべて表示
- Multisort Table Header Cell Renderer « Java Tips Weblog
- 第
2
キー以下を薄く表示するサンプル Windows 7
でデフォルトのWindowsLookAndFeel
が使用するヘッダセルレンダラー(ソートのマークが文字列の右ではなく上部に表示される)と併用したい場合は修正が必要- この修正を行ったレンダラーを他の
LookAndFeel
で使用すると第1
ソートキーが非表示になる
- この修正を行ったレンダラーを他の
- 第