JTableのソートで空文字列を常に末尾にする
Total: 5533, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JTableの空文字列を昇順・降順のどちらでソートしても常に末尾になるようなComparatorを設定します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
Comparator<String>#compare(...)をオーバーライドして昇順の場合は「空文字列 < 文字列」、降順の場合は「空文字列 > 文字列」として常に空文字列以外が優先されるComparatorを作成- この
ComparatorをTableRowSorter#setComparator(...)ですべての列に設定 JTableのソートではnullは内部でふるい落とされてしまうため、Comparator#nullsFirst(...)などは使用しても無意味@Override public int compare(String a, String b)の引数a、bがnullになることはない
- 空文字列ではなく
nullが設定されている場合、表示上は同一だが降順ソートするとnullが先頭にきてしまう
- この