JFileChooserのリサイズでファイル名編集をキャンセルする
Total: 31
, Today: 10
, Yesterday: 21
Posted by aterai at
Last-modified:
Summary
JFileChooser
のFilePane
でCellEditor
が表示中にJFileChooser
のサイズ変更が発生した場合、そのリネームをキャンセルするComponentListener
を作成します。
Screenshot

Advertisement
Source Code Examples
class CancelEditListener extends ComponentAdapter {
private final JFileChooser chooser;
protected CancelEditListener(JFileChooser chooser) {
super();
this.chooser = chooser;
}
@Override public void componentResized(ComponentEvent e) {
// sun.swing.FilePane.cancelEdit();
chooser.setSelectedFile(null);
}
}
View in GitHub: Java, KotlinExplanation
Default
- デフォルトの
MetalLookAndFeel
やWindowsLookAndFeel
のJFileChooser
でListView
中のファイル名を編集するCellEditor
を表示したままJFileChooser
をリサイズしてもCellEditor
は編集状態を維持する - このため、
CellEditor
の表示中にJFileChooser
をリサイズして編集中のセル位置が変化した場合、上記のスクリーンショットのようにCellEditor
の位置がずれてしまう場合がある - FileDialogではそのリサイズでリネームはキャンセルされる
DetailsView
のCellEditor
はJFileChooser
のリサイズでセル位置は変化しない、またカラムのリサイズでもリネームはキャンセルされる
- デフォルトの
JFileChooser
ComponentListener#componentResized(...)
をオーバーライドしてリサイズイベントが発生したらリネームをキャンセルするComponentListener
をJFileChooser
に追加sun.swing.FilePane.cancelEdit()
は直接実行できないので、JFileChooser#setSelectedFile(null)
を実行することでリネームをキャンセルする- JFileChooserの詳細表示でファイル名が編集中の場合はそれをキャンセルする
DetailsView
でのCellEditor
もこのComponentListener#componentResized(...)
でキャンセルされる
JFileChooser
のリサイズでリネームをキャンセルするとCellEditor
の表示が一瞬チラつく場合がある?
Dialog
JFileChooser#createDialog()
をオーバーライドして親JDialog
にリネームをキャンセルするComponentListener
を追加JFileChooser
にComponentListener
を追加した場合とは異なり、マウスカーソルがリサイズカーソルの状態でJDialog
のフチをプレスした時点でリサイズイベントが発生するため、上記のような表示の乱れは発生しない?JFileChooser chooser = new JFileChooser() { @Override protected JDialog createDialog(Component parent) { JDialog dialog = super.createDialog(parent); dialog.addComponentListener(new CancelEditListener(this)); return dialog; } };
Reference
- JListのセルに配置したJLabelのテキストを編集する
- JFileChooserのセルエディタでリネームを開始したとき拡張子を除くファイル名を選択状態にする
- FileDialogでファイルを選択する
- JFileChooserの詳細表示でファイル名が編集中の場合はそれをキャンセルする