• category: swing folder: DetailsViewFileChooser title: JFileChooserのデフォルトをDetails Viewに設定 tags: [JFileChooser, FilePane] author: aterai pubdate: 2011-01-10T17:02:55+09:00 description: JFileChooserを開いたときのデフォルトをリストではなく詳細に変更します。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TSq77M-soeI/AAAAAAAAAxg/0nnen-n-cAY/s800/DetailsViewFileChooser.png

概要

概要

JFileChooserを開いたときのデフォルトをリストではなく詳細に変更します。

サンプルコード

サンプルコード

#spandel
//java - How can I start the JFileChooser in the Details view? - Stack Overflow]
#spanend
#spandel
//http://stackoverflow.com/questions/16292502/how-can-i-start-the-jfilechooser-in-the-details-view
#spanend
#spandel
//for (Object key: chooser.getActionMap().allKeys()) {
#spanend
#spandel
//    System.out.println(key);
#spanend
#spandel
//}
#spanend
#spandel
Action detailsAction = chooser.getActionMap().get("viewTypeDetails");
#spanend
#spandel
if (detailsAction != null) {
#spanend
  detailsAction.actionPerformed(null);
#spandel
}
#spanend
#spanadd
// java - How can I start the JFileChooser in the Details view? - Stack Overflow]
#spanend
#spanadd
// https://stackoverflow.com/questions/16292502/how-can-i-start-the-jfilechooser-in-the-details-view
#spanend
#spanadd
// for (Object key: chooser.getActionMap().allKeys()) {
#spanend
#spanadd
//   System.out.println(key);
#spanend
#spanadd
// }
#spanend
#spanadd
String cmd = "viewTypeDetails";
#spanend
#spanadd
Optional.ofNullable(chooser.getActionMap().get(cmd))
#spanend
  .ifPresent(a -> a.actionPerformed(new ActionEvent(e.getSource(), e.getID(), cmd)));
View in GitHub: Java, Kotlin

解説

解説

#spandel
//@see javax/swing/plaf/basic/BasicFileChooserUI.java
#spanend
#spanadd
// @see javax/swing/plaf/basic/BasicFileChooserUI.java
#spanend
ActionMap map = new ActionMapUIResource();
Action refreshAction = new UIAction(FilePane.ACTION_REFRESH) {
  public void actionPerformed(ActionEvent evt) {
  public void actionPerformed(ActionEvent e) {
    getFileChooser().rescanCurrentDirectory();
  }
};
map.put(FilePane.ACTION_APPROVE_SELECTION, getApproveSelectionAction());
map.put(FilePane.ACTION_CANCEL, getCancelSelectionAction());
map.put(FilePane.ACTION_REFRESH, refreshAction);
map.put(FilePane.ACTION_CHANGE_TO_PARENT_DIRECTORY, getChangeToParentDirectoryAction());

#spandel
//sun.swing.FilePane.ACTION_APPROVE_SELECTION = "approveSelection";
#spanend
#spandel
//sun.swing.FilePane.ACTION_CANCEL            = "cancelSelection";
#spanend
#spandel
//sun.swing.FilePane.ACTION_EDIT_FILE_NAME    = "editFileName";
#spanend
#spandel
//sun.swing.FilePane.ACTION_REFRESH           = "refresh";
#spanend
#spandel
//sun.swing.FilePane.ACTION_CHANGE_TO_PARENT_DIRECTORY = "Go Up";
#spanend
#spandel
//sun.swing.FilePane.ACTION_NEW_FOLDER        = "New Folder";
#spanend
#spandel
//sun.swing.FilePane.ACTION_VIEW_LIST         = "viewTypeList";
#spanend
#spandel
//sun.swing.FilePane.ACTION_VIEW_DETAILS      = "viewTypeDetails";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_APPROVE_SELECTION = "approveSelection";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_CANCEL            = "cancelSelection";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_EDIT_FILE_NAME    = "editFileName";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_REFRESH           = "refresh";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_CHANGE_TO_PARENT_DIRECTORY = "Go Up";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_NEW_FOLDER        = "New Folder";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_VIEW_LIST         = "viewTypeList";
#spanend
#spanadd
// sun.swing.FilePane.ACTION_VIEW_DETAILS      = "viewTypeDetails";
#spanend
  • - JFileChooserの子でUIManager.getIcon("FileChooser.detailsViewIcon")アイコンが設定されているJToggleButtonを検索、doClick()することで、ListからDetailsView(詳細)に切り替える方法もあります。
  • MetalLookAndFeelなどのJFileChooserの子でUIManager.getIcon("FileChooser.detailsViewIcon")アイコンが設定されているJToggleButtonを検索、doClick()することでListからDetailsView(詳細)に切り替え
    • WindowsLookAndFeelでのJFileChooserDetailsView切り替えはJRadioButtonMenuItemなのでこの方法は使用不可
#spandel
//searchAndClick(chooser, UIManager.getIcon("FileChooser.detailsViewIcon"));
#spanend
#spanadd
// searchAndClick(chooser, UIManager.getIcon("FileChooser.detailsViewIcon"));
#spanend
private static boolean searchAndClick(Container parent, Icon icon) {
  for (Component c:parent.getComponents()) {
    if (c instanceof JToggleButton && ((JToggleButton) c).getIcon() == icon) {
      ((AbstractButton) c).doClick();
      return true;
    } else {
      if (searchAndClick((Container) c, icon)) {
        return true;
      }
    }
  }
  return false;
}
  • - 警告されますが、以下のようにsun.swing.FilePane#setViewType(sun.swing.FilePane.VIEWTYPE_DETAILS)メソッドを使用する方法もあります。
  • 警告されるが以下のようにsun.swing.FilePane#setViewType(sun.swing.FilePane.VIEWTYPE_DETAILS)メソッドを使用する方法もある
FilePane filePane = (FilePane) findChildComponent(chooser, FilePane.class);
filePane.setViewType(FilePane.VIEWTYPE_DETAILS);

参考リンク

参考リンク

コメント

コメント