JTableのソート
Total: 33747
, Today: 1
, Yesterday: 4
Posted by aterai at
Last-modified:
概要
JTable
のカラムヘッダをクリックすることで、行表示を降順、昇順にソートします。以下のサンプルは、SortableTableExampleを参考にして作成しています。
Screenshot
Advertisement
サンプルコード
class SortableTableModel extends DefaultTableModel {
public SortableTableModel(String[] str, int row) {
super(str, row);
}
public void sortByColumn(int column, boolean isAscent) {
Collections.sort(
getDataVector(),
new ColumnComparator(column, isAscent));
fireTableDataChanged();
}
}
class ColumnComparator implements Comparator<Object>, Serializable {
private static final long serialVersionUID = 1L;
protected final int index;
protected final boolean ascending;
protected ColumnComparator(int index, boolean ascending) {
this.index = index;
this.ascending = ascending;
}
@SuppressWarnings("unchecked")
@Override public int compare(Object one, Object two) {
if (one instanceof List && two instanceof List) {
Comparable<Object> o1 =
(Comparable<Object>) ((List<Object>) one).get(index);
Comparable<Object> o2 =
(Comparable<Object>) ((List<Object>) two).get(index);
int c = Objects.compare(
o1, o2, Comparator.nullsFirst(
Comparator.<Comparable<Object>>naturalOrder()));
return c * (ascending ? 1 : -1);
}
return 0;
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、各カラムヘッダのクリックでソート可能になっています。
- 複数の列をキーにしてソートしたい場合は
TableSorter.java
が利用可能 JDK 1.6.0
からJTable
のソートが標準機能として追加された
参考リンク
SortableTableExample- Sorting and Otherwise Manipulating Data - How to Use Tables (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)