Swing/FileChooserShortcutPanelFolders のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/FileChooserShortcutPanelFolders へ行く。
- 1 (2022-02-07 (月) 15:35:21)
- 2 (2022-08-03 (水) 10:59:27)
- category: swing folder: FileChooserShortcutPanelFolders title: JFileChooserのPlacesBarショートカットの初期値を変更する tags: [JFileChooser, WindowsLookAndFeel] author: aterai pubdate: 2022-02-07T15:34:06+09:00 description: JFileChooserのPlacesBarショートカットフォルダの初期値をドキュメントからPCに変更します。 image: https://drive.google.com/uc?id=1u-38lQnqii8nemRJxB3MkP1OoPDrgaZs
概要
JFileChooserのPlacesBarショートカットフォルダの初期値をドキュメントからPCに変更します。
Screenshot
Advertisement
サンプルコード
JButton button2 = new JButton("ShellFolder.get(\"fileChooserShortcutPanelFolders\")");
button2.addActionListener(e -> {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
FileSystemView fsv = chooser.getFileSystemView();
File[] files = (File[]) ShellFolder.get("fileChooserShortcutPanelFolders");
chooser.addHierarchyListener(ev -> {
Component c = ev.getComponent();
if ((ev.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && c.isShowing()) {
Class<JToggleButton> clz = JToggleButton.class;
descendants(chooser)
.filter(clz::isInstance).map(clz::cast)
.filter(rb -> fsv.getSystemDisplayName(files[3]).equals(rb.getText()))
.findFirst().ifPresent(AbstractButton::doClick);
}
});
chooser.showOpenDialog(getRootPane());
});
View in GitHub: Java, Kotlin解説
Default
Windows 10
環境でWindowsLookAndFeel
を適用したJFileChooser
のPlacesBar
には「最近使った項目(Recent
)」、「デスクトップ(Desktop
)」、「ドキュメント(Document
)」、「PC
(This PC
)」、「ネットワーク(Network
)」が表示され、デフォルトでは「ドキュメント」が選択状態になっている
System.getenv("SystemDrive")
System.getenv("SystemDrive") + File.separatorChar
でC:\
ドライブのFile
を取得し、その親フォルダをFileSystemView#getParentDirectory(...)
メソッドで取得- この親フォルダが「
PC
(This PC
)」となるのでJFileChooser#setCurrentDirectory(...)
で設定してからJFileChooser
を開く - java - How to make JFileChooser Default to Computer View instead of My Documents - Stack Overflow
ShellFolder.get("fileChooserShortcutPanelFolders")
ShellFolder.get("fileChooserShortcutPanelFolders")
でショートカットフォルダ一覧をFile
配列で取得PlacesBar
のショートカットはJToggleButton
で作成されているのでJFileChooser
にHierarchyListener
を追加してダイアログが表示状態になったらその子コンポーネントを検索FileSystemView#getSystemDisplayName(File)
で取得可能なシステム表示名が一致するボタンテキストのJToggleButton
を発見したらdoClick()
を実行- Containerの子Componentを再帰的にすべて取得する
参考リンク
- java - How to make JFileChooser Default to Computer View instead of My Documents - Stack Overflow
- Containerの子Componentを再帰的にすべて取得する