Swing/FileChooserSortKeys のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/FileChooserSortKeys へ行く。
- 1 (2024-07-08 (月) 01:47:07)
- category: swing folder: FileChooserSortKeys title: JFileChooserの詳細表示でソートする列を指定する tags: [JFileChooser, JTable] author: aterai pubdate: 2024-07-08T01:45:40+09:00 description: JFileChooserの詳細表示で使用するJTableが初期状態でソートする列を指定します。 image: https://drive.google.com/uc?id=1LTwHuFGMBhjtnq2DZ4NSR765DYOeqXjW
概要
JFileChooserの詳細表示で使用するJTableが初期状態でソートする列を指定します。
Screenshot
Advertisement
サンプルコード
private JFileChooser makeFileChooser() {
return new JFileChooser() {
private transient AncestorListener handler = null;
@Override public void updateUI() {
removeAncestorListener(handler);
super.updateUI();
handler = new AncestorListener() {
@Override public void ancestorAdded(AncestorEvent e) {
JFileChooser fc = (JFileChooser) e.getComponent();
SwingUtils.setViewTypeDetails(fc);
SwingUtils.descendants(fc)
.filter(JTable.class::isInstance)
.map(JTable.class::cast)
.findFirst()
.ifPresent(table -> {
List<?> sortKeys = table.getRowSorter().getSortKeys();
int col = model.getNumber().intValue();
if (col < 0) {
table.getRowSorter().setSortKeys(Collections.emptyList());
} else if (sortKeys.isEmpty() && col < table.getColumnCount()) {
SortOrder order = combo.getItemAt(combo.getSelectedIndex());
RowSorter.SortKey key = new RowSorter.SortKey(col, order);
table.getRowSorter().setSortKeys(Collections.singletonList(key));
}
});
}
// ...
};
addAncestorListener(handler);
}
};
}
View in GitHub: Java, Kotlin解説
JFileChooser
にAncestorListener
を追加JFileChooser
の親ダイアログでsetVisible(true)
が呼び出されたときに実行されるancestorAdded(AncestorEvent)
で詳細表示用のJTable
を検索- 詳細表示用
JTable
からRowSorter
を取得しRowSorter#setSortKeys(...)
でソートする列を指定 - このサンプルでは初回やソートキーが空の場合
JSpinner
でソートする列、JComboBox<SortOrder>
でソート方向を指定可能- それ以外の場合は前回設定したソート状態を維持する
- ソートする列を
-1
にした場合、table.getRowSorter().setSortKeys(Collections.emptyList())
で空のソートキーを設定してソート状態をリセットする