• 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に変更します。

サンプルコード

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を適用したJFileChooserPlacesBarには「最近使った項目(Recent)」、「デスクトップ(Desktop)」、「ドキュメント(Document)」、「PC(This PC)」、「ネットワーク(Network)」が表示され、デフォルトでは「ドキュメント」が選択状態になっている
  • System.getenv("SystemDrive")
  • ShellFolder.get("fileChooserShortcutPanelFolders")
    • ShellFolder.get("fileChooserShortcutPanelFolders")でショートカットフォルダ一覧をFile配列で取得
    • PlacesBarのショートカットはJToggleButtonで作成されているのでJFileChooserHierarchyListenerを追加してダイアログが表示状態になったらその子コンポーネントを検索
    • FileSystemView#getSystemDisplayName(File)で取得可能なシステム表示名が一致するボタンテキストのJToggleButtonを発見したらdoClick()を実行
    • Containerの子Componentを再帰的にすべて取得する

参考リンク

コメント