Swing/EmptiesLastTableRowSorter のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/EmptiesLastTableRowSorter へ行く。
- 1 (2020-02-17 (月) 15:41:06)
- 2 (2021-08-03 (火) 14:57:41)
- 3 (2023-11-15 (水) 09:29:03)
- category: swing folder: EmptiesLastTableRowSorter title: JTableのソートで空文字列を常に末尾にする tags: [JTable, TableRowSorter, Comparator] author: aterai pubdate: 2020-02-17T15:39:55+09:00 description: JTableの空文字列を昇順・降順のどちらでソートしても常に末尾になるようなComparatorを設定します。 image: https://drive.google.com/uc?id=1l9euW_QP9-mgRVSkxLocJ5XBOWphL8a8
概要
JTable
の空文字列を昇順・降順のどちらでソートしても常に末尾になるようなComparator
を設定します。
Screenshot
Advertisement
サンプルコード
class RowComparator implements Comparator<String> {
protected final int column;
private final JTable table;
protected RowComparator(JTable table, int column) {
this.table = table;
this.column = column;
}
@Override public int compare(String a, String b) {
int flag = 1;
List<? extends RowSorter.SortKey> keys = table.getRowSorter().getSortKeys();
if (!keys.isEmpty()) {
RowSorter.SortKey sortKey = keys.get(0);
if (sortKey.getColumn() == column && sortKey.getSortOrder() == SortOrder.DESCENDING) {
flag = -1;
}
}
if (a.isEmpty() && !b.isEmpty()) {
return flag;
} else if (!a.isEmpty() && b.isEmpty()) {
return -1 * flag;
} else {
return a.compareTo(b);
}
}
}
View in GitHub: Java, Kotlin解説
Comparator<String>#compare(...)
をオーバーライドして、昇順の場合は「空文字列 < 文字列」、降順の場合は、「空文字列 > 文字列」として、常に空文字列以外が優先されるComparator
を作成してTableRowSorter#setComparator(...)
ですべての列に設定JTable
のソートではnull
は内部でふるい落とされてしまう@Override public int compare(String a, String b)
の引数a
、b
がnull
になることはない
- 空文字列ではなく
null
が設定されている場合、表示上は同一だが降順ソートするとnull
が先頭にきてしまう