Swing/CancelFilePaneCellEditor のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/CancelFilePaneCellEditor へ行く。
- 1 (2025-06-02 (月) 06:36:19)
- 2 (2025-06-19 (木) 12:41:37)
- 3 (2025-06-19 (木) 12:43:47)
- category: swing folder: CancelFilePaneCellEditor title: JFileChooserのリサイズでファイル名編集をキャンセルする tags: [JFileChooser, JDialog, ComponentListener] author: aterai pubdate: 2025-06-02T06:33:17+09:00 description: JFileChooserのFilePaneでCellEditorが表示中にJFileChooserのサイズ変更が発生した場合、そのリネームをキャンセルするComponentListenerを作成します。 image: https://drive.google.com/uc?id=1g0K3CSMMj_MdIGjzm1Ofd3_qWPQR_Exe
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
のリサイズでリネームをキャンセルすると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でファイルを選択する