Swing/TableSorter のバックアップ(No.28)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/TableSorter へ行く。
- 1 (2007-02-22 (木) 18:44:05)
- 2 (2007-03-09 (金) 01:26:17)
- 3 (2007-07-26 (木) 23:16:15)
- 4 (2007-07-30 (月) 16:34:50)
- 5 (2009-12-07 (月) 17:20:00)
- 6 (2010-08-05 (木) 06:07:47)
- 7 (2010-08-05 (木) 13:00:36)
- 8 (2010-08-05 (木) 15:42:51)
- 9 (2010-08-05 (木) 17:54:10)
- 10 (2010-09-10 (金) 12:41:32)
- 11 (2010-09-10 (金) 14:45:58)
- 12 (2010-09-10 (金) 16:22:46)
- 13 (2010-09-10 (金) 18:58:47)
- 14 (2013-03-31 (日) 20:02:48)
- 15 (2013-05-19 (日) 16:37:19)
- 16 (2013-07-26 (金) 01:14:47)
- 17 (2013-08-22 (木) 15:30:39)
- 18 (2013-09-10 (火) 00:40:59)
- 19 (2013-09-17 (火) 14:40:03)
- 20 (2014-05-02 (金) 12:48:55)
- 21 (2014-11-05 (水) 04:52:11)
- 22 (2014-11-25 (火) 03:03:31)
- 23 (2015-05-26 (火) 15:59:57)
- 24 (2016-05-26 (木) 15:32:04)
- 25 (2016-05-28 (土) 18:25:00)
- 26 (2016-06-01 (水) 18:46:02)
- 27 (2016-08-19 (金) 16:14:50)
- 28 (2017-03-31 (金) 16:09:06)
- 29 (2017-04-04 (火) 14:17:08)
- 30 (2018-03-15 (木) 13:17:19)
- 31 (2019-05-22 (水) 19:34:28)
- 32 (2020-03-18 (水) 22:15:53)
- 33 (2021-09-24 (金) 14:49:24)
- category: swing folder: TableSorter title: TableSorterでJTableをソート tags: [JTable, TableSorter] author: aterai pubdate: 2005-02-28T18:44:05+09:00 description: JDK 1.5.0以前に、The Java™ TutorialにあったTableSorter.javaを使用して、JTableの行を降順、昇順、初期状態にソートします。 image:
概要
JDK 1.5.0
以前に、The Java™ Tutorial
にあったTableSorter.java
を使用して、JTable
の行を降順、昇順、初期状態にソートします。
Screenshot
Advertisement
サンプルコード
//DefaultTableModel model = new DefaultTableModel();
TestModel model = new TestModel();
TableSorter sorter = new TableSorter(model);
JTable table = new JTable(sorter);
sorter.setTableHeader(table.getTableHeader());
View in GitHub: Java, Kotlin解説
The Java™ Tutorial
版のTableSorter
を使用して、JTableのソートで使用しているものと同じTableModel
でソートしています。
TableSorter
には、Ctrlキーを押しながらヘッダをクリックすると、そのカラムを第二キーとしてソートする機能もあります。
JDK 1.4.x
とWindows XP
の環境で、ヘッダにカーソルを置いてもロールオーバーしない場合があるようです。上記のスクリーンショットはJDK 1.5.0_01
で撮っています。
JDK 1.5.0
でGenerics
の警告を出さないようにするには、TableSorter.java
に、以下のような修正を加えれば良いようです。
private static class ComparableComparator implements Comparator {
@SuppressWarnings("unchecked")
public int compare(Object o1, Object o2) {
return ((Comparable) o1).compareTo(o2);
}
}
public static final ComparableComparator COMPARABLE_COMAPRATOR
= new ComparableComparator();
public static final ComparableComparator LEXICAL_COMPARATOR
= new ComparableComparator() {
@SuppressWarnings("unchecked")
public int compare(Object o1, Object o2) {
return o1.toString().compareTo(o2.toString());
}
};
private TableModelListener tableModelListener;
private Map<Class, Comparator> columnComparators = new HashMap<>();
private List<Directive> sortingColumns = new ArrayList<>();
protected ComparableComparator getComparator(int column) {
Class columnType = tableModel.getColumnClass(column);
ComparableComparator comparator
= (ComparableComparator) columnComparators.get(columnType);
if (comparator != null) {
return comparator;
}
private class Row implements Comparable<Row> {
private int modelIndex;
public Row(int index) {
this.modelIndex = index;
}
public int compareTo(Row o) {
int row1 = modelIndex;
int row2 = o.modelIndex;
//......
LookAndFeel
を動作中に切り替える場合は、sorter.setTableHeader(table.getTableHeader());
で設定したJTableHeader
を新しいLookAndFeel
を適用したものに入れ替えておかないと、NullPointerException
が発生します。
private final TableSorter sorter = new TableSorter(model);
private final JTable table = new JTable(sorter) {
@Override public void updateUI() {
sorter.setTableHeader(null);
super.updateUI();
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
JTableHeader h = table.getTableHeader();
sorter.setTableHeader(h);
h.repaint();
}
});
}
};
JDK 1.6.0
からJTable
には標準でソート機能が追加された
参考リンク
- Sorting and Otherwise Manipulating Data - How to Use Tables (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)
- How to Use Tables
- Generics - Simple method but hard with generics: compareTo()
- TableSorter.java