• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JFileChooserを開いた時のカレントディレクトリを設定する
#navi(../)
#tags(JFileChooser)
RIGHT:Posted by &author(aterai); at 2012-09-17
*JFileChooserを開いた時のカレントディレクトリを設定する [#cba099f5]
``JFileChooser``を開いた時のカレントディレクトリを設定します。
---
category: swing
folder: FileChooserCurrentDirectory
title: JFileChooserを開いた時のカレントディレクトリを設定する
tags: [JFileChooser]
author: aterai
pubdate: 2012-09-17T13:37:55+09:00
description: JFileChooserを開いた時のカレントディレクトリを設定します。
image: https://lh5.googleusercontent.com/-L0xUhPSuu1Y/UFaopCvyPFI/AAAAAAAABSg/JUQJkTi-0BI/s800/FileChooserCurrentDirectory.png
---
* 概要 [#summary]
`JFileChooser`を開いた時のカレントディレクトリを設定します。

//-&jnlp;
-&jar;
-&zip;
#download(https://lh5.googleusercontent.com/-L0xUhPSuu1Y/UFaopCvyPFI/AAAAAAAABSg/JUQJkTi-0BI/s800/FileChooserCurrentDirectory.png)

//#screenshot
#ref(https://lh5.googleusercontent.com/-L0xUhPSuu1Y/UFaopCvyPFI/AAAAAAAABSg/JUQJkTi-0BI/s800/FileChooserCurrentDirectory.png)

**サンプルコード [#p0d43a91]
* サンプルコード [#sourcecode]
#code(link){{
File f = new File(field.getText().trim());
JFileChooser fc = check1.isSelected()?fc2:fc0;
JFileChooser fc = check1.isSelected() ? fc2 : fc0;
fc.setCurrentDirectory(f);
int retvalue = fc.showOpenDialog(p);
if(retvalue==JFileChooser.APPROVE_OPTION) {
if (retvalue == JFileChooser.APPROVE_OPTION) {
  log.setText(fc.getSelectedFile().getAbsolutePath());
}
}}

**解説 [#qb9aa1fa]
``JFileChooser.DIRECTORIES_ONLY``で、ディレクトリのみ表示する場合のカレントディレクトリの設定をテストします。
* 解説 [#explanation]
`JFileChooser.DIRECTORIES_ONLY`で、ディレクトリのみ表示する場合のカレントディレクトリの設定をテストします。

- [http://docs.oracle.com/javase/jp/6/api/javax/swing/JFileChooser.html#setCurrentDirectory(java.io.File) setCurrentDirectory]: ``JFileChooser#setCurrentDirectory(File)``で``CurrentDirectory``を設定
-- 参照:コンボボックスにディレクトリ名
-- リストには、``CurrentDirectory``内のディレクトリ一覧
-- フォルダ名:テキストフィールドは前回の文字列(``setCurrentDirectory``では変化しない)
-- 存在しないファイルを``setCurrentDirectory``で設定すると、前回の``CurrentDirectory``(初回に存在しないファイルが設定された場合はOSのデフォルト)が表示される
--- 上記のサンプルで、"Change !dir.exists() case"にチェックをした場合、前回のディレクトリではなく、参照可能な親ディレクトリを検索するよう、``setCurrentDirectory``をオーバーライドした``JFileChooser``を使用
- `setCurrentDirectory`
-- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JFileChooser.html#setCurrentDirectory-java.io.File-  JFileChooser#setCurrentDirectory(File)]メソッドで`CurrentDirectory`を設定
-- 参照: コンボボックスにディレクトリ名
-- リストには`CurrentDirectory`内のディレクトリ一覧
-- フォルダ名: テキストフィールドは前回の文字列(`setCurrentDirectory`では変化しない)
-- 存在しないファイルを`setCurrentDirectory`で設定すると、前回の`CurrentDirectory`(初回に存在しないファイルが設定された場合は`OS`のデフォルト)が表示される
--- 上記のサンプルで`Change !dir.exists() case`にチェックをした場合、前回のディレクトリではなく参照可能な親ディレクトリを検索するよう`setCurrentDirectory`をオーバーライドした`JFileChooser`を使用する
#code{{
JFileChooser fc2 = new JFileChooser() {
  @Override public void setCurrentDirectory(File dir) {
    if(dir!=null && !dir.exists()) {
    if (dir != null && !dir.exists()) {
      this.setCurrentDirectory(dir.getParentFile());
    }
    super.setCurrentDirectory(dir);
  }
};
}}

- [http://docs.oracle.com/javase/jp/6/api/javax/swing/JFileChooser.html#setSelectedFile(java.io.File) setSelectedFile]: JFileChooser#setSelectedFile(File)で選択ファイルとしてディレクトリを設定
-- 参照:コンボボックスには、選択ファイルとして設定したディレクトリの親ディレクトリ名
-- リストには、親ディレクトリ内のディレクトリ一覧
--- ``Metal``や``Nimbus LookAndFeel``では、選択ファイルとして設定したディレクトリが選択状態になる
--- ``Metal``などの``LookAndFeel``でも、ディレクトリが選択状態にならない場合がある
--- 上記のサンプルで、"isParent reset?"にチェックをした場合、``!fileChooser.getFileSystemView().isParent(fileChooser.getCurrentDirectory(), dir)==false``になるように?``setSelectedFile``で選択ファイルをリセット
-- フォルダ名:テキストフィールドは選択ファイルとして設定したディレクトリ
-- 存在しないディレクトリを``setSelectedFile``で設定するとその親ディレクトリ、親ディレクトリも存在しない場合は、OSのデフォルトがカレントディレクトリとなる
- `setSelectedFile`
-- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JFileChooser.html#setSelectedFile-java.io.File- JFileChooser#setSelectedFile(File)]メソッドで選択ファイルとしてディレクトリを設定
-- 参照: コンボボックスには選択ファイルとして設定したディレクトリの親ディレクトリ名
-- リストには親ディレクトリ内のディレクトリ一覧
--- `Metal`や`Nimbus LookAndFeel`では、選択ファイルとして設定したディレクトリが選択状態になる
--- `Metal`などの`LookAndFeel`でもディレクトリが選択状態にならない場合がある
--- 上記のサンプルで`isParent reset?`にチェックをした場合、`!fileChooser.getFileSystemView().isParent(fileChooser.getCurrentDirectory(), dir)==false`になるように?`setSelectedFile`で選択ファイルをリセットする
-- フォルダ名: テキストフィールドは選択ファイルとして設定したディレクトリ
-- 存在しないディレクトリを`setSelectedFile`で設定するとその親ディレクトリ、親ディレクトリも存在しない場合は`OS`のデフォルトがカレントディレクトリとなる

//**参考リンク
**コメント [#f056ec3f]
// - メモ
// -- `UIManager.getBoolean("FileChooser.usesSingleFilePane")`の動作が良く分からない...

* 参考リンク [#reference]
- [https://bugs.openjdk.org/browse/JDK-8184272 JDK-8184272 JFileChooserOperator.enterSubDir does not navigate to sub directory - Java Bug System]

* コメント [#comment]
#comment
#comment