JFileChooserで新規フォルダ作成を無効化する
Total: 1077
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
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