Swing/TableSorter のバックアップの現在との差分(No.23)
- category: swing folder: TableSorter title: TableSorterでJTableをソート tags: [JTable, TableSorter] author: aterai pubdate: 2005-02-28 description: JDK 1.5.0以前に、The Java™ TutorialにあったTableSorter.javaを使用して、JTableの行を降順、昇順、初期状態にソートします。 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
の行を降順、昇順、初期状態にソートします。
概要
JDK 1.5.0
以前に、The Java™ Tutorial
に存在したTableSorter.java
を使用して、JTable
の行を降順、昇順、初期状態にソートします。
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
//DefaultTableModel model = new DefaultTableModel();
#spanend
#spanadd
// DefaultTableModel model = new DefaultTableModel();
#spanend
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
でソートしています。
解説
The Java™ Tutorial
版のTableSorter
を使用して、JTableのソートで使用しているものと同じTableModel
をソートしています。
TableSorter
には、Ctrlキーを押しながらヘッダをクリックすると、そのカラムを第二キーとしてソートする機能もあります。
-
TableSorter
にはCtrlキーを押しながらヘッダをクリックすると、そのカラムを第2
キー、第3
キーとしてソートする機能もある -
JDK 1.5.0
でGenerics
の警告を出さないようにするにはTableSorter.java
に以下のような修正が必要
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);
}
}
#spanadd
#spanend
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> {
if (comparator != null) {
return comparator;
}
#spanadd
// ...
#spanend
#spanadd
private class Row implements Comparable<Row> {
#spanend
private int modelIndex;
public Row(int index) {
this.modelIndex = index;
}
public int compareTo(Row o) {
int row1 = modelIndex;
int row2 = o.modelIndex;
#spandel
//......
#spanend
#spanadd
// ...
#spanend
-
JDK 1.6.0
からJTable
には標準でソート機能が追加されています。 -
LookAndFeel
を動作中に切り替える場合は、sorter.setTableHeader(table.getTableHeader());
で設定したJTableHeader
を新しいLookAndFeel
を適用したものに入れ替えておかないとNullPointerException
が発生する
#spanend
#spanadd
private final TableSorter sorter = new TableSorter(model);
#spanend
#spanadd
private final JTable table = new JTable(sorter) {
#spanend
@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();
}
});
}
#spanadd
};
#spanend
#spanadd
- -
-
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
参考リンク
- 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
- TableSorter.java