• title: JFileChooserのデフォルトをDetails Viewに設定 tags: [JFileChooser, FilePane] author: aterai pubdate: 2011-01-10T17:02:55+09:00 description: JFileChooserを開いたときのデフォルトをリストではなく詳細に変更します。

概要

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

サンプルコード

//java - How can I start the JFileChooser in the Details view? - Stack Overflow]
//http://stackoverflow.com/questions/16292502/how-can-i-start-the-jfilechooser-in-the-details-view
//for(Object key: chooser.getActionMap().allKeys()) {
//    System.out.println(key);
//}
Action detailsAction = chooser.getActionMap().get("viewTypeDetails");
if(detailsAction!=null) detailsAction.actionPerformed(null);
View in GitHub: Java, Kotlin

解説


JFileChooserの子でUIManager.getIcon("FileChooser.detailsViewIcon")アイコンが設定されているJToggleButtonを検索、doClick()することで、ListからDetailsView(詳細)に切り替える方法もあります。

//searchAndClick(chooser, UIManager.getIcon("FileChooser.detailsViewIcon"));
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)メソッドを使用する方法もあります。

FilePane filePane = (FilePane)findChildComponent(chooser, FilePane.class);
filePane.setViewType(FilePane.VIEWTYPE_DETAILS);

参考リンク

コメント