Swing/DisableNewFolderAction のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DisableNewFolderAction へ行く。
- 1 (2022-05-09 (月) 03:25:02)
- 2 (2022-08-20 (土) 22:15:25)
- category: swing folder: DisableNewFolderAction title: JFileChooserで新規フォルダ作成を無効化する tags: [JFileChooser] author: aterai pubdate: 2022-05-09T03:24:27+09:00 description: JFileChooserで既存ファイルの名前変更は有効のまま新規フォルダの作成のみ無効に設定します。 image: https://drive.google.com/uc?id=1a7Lm2pVbgfsEnORKxYiekYuJz_rAwCCI
概要
JFileChooser
で既存ファイルの名前変更は有効のまま新規フォルダの作成のみ無効に設定します。
Screenshot
Advertisement
サンプルコード
JFileChooser fc2 = new JFileChooser();
fc2.setFileSystemView(new FileSystemView() {
@Override public File createNewFolder(File containingDir) {
return null;
}
});
String cmd = "New Folder"; // = sun.swing.FilePane.ACTION_NEW_FOLDER
Optional.ofNullable(fc2.getActionMap().get(cmd)).ifPresent(a -> a.setEnabled(false));
fc2.addPropertyChangeListener(JFileChooser.DIRECTORY_CHANGED_PROPERTY, e -> {
if (e.getNewValue() instanceof File) {
Optional.ofNullable(fc2.getActionMap().get(cmd)).ifPresent(a -> a.setEnabled(false));
}
});
View in GitHub: Java, Kotlin解説
FileSystemView#createNewFolder(...)
をオーバーライドしnull
を返すよう設定して新規フォルダの作成を無効化- ツールバーの「新規フォルダの作成」ボタンやコンテキストメニューの「新規フォルダ」メニューアイテムはクリック可能だが、クリックしても新規フォルダが作成されなくなる
JFileChooser#getActionMap()
でFilePane.ACTION_NEW_FOLDER
アクションを取得しsetEnabled(false)
で無効化- フォルダごとに新規フォルダが作成可能かどうかは変化するので、
JFileChooser
にPropertyChangeListener
を追加してカレントディレクトリが変更されるたびに「新規フォルダの作成」アクションを無効化している - [JDK-8021379] JFileChooser Create New Folder button enabled in write proteced directory - Java Bug System
- JFileChooserに画像プレビューを追加
- フォルダごとに新規フォルダが作成可能かどうかは変化するので、
UIManager.put("FileChooser.readOnly", Boolean.TRUE)
でJFileChooser
をリードオンリーにすると「新規フォルダの作成」だけでなくファイルの「名前の変更」も不可になる
参考リンク
- JFileChooserを編集不可にする
- JFileChooserに画像プレビューを追加
- [JDK-8021379] JFileChooser Create New Folder button enabled in write proteced directory - Java Bug System