2011-11-26 14 views
15

Javaアプリケーションを使用する場合、ダイアログボックスを開くたびに、開始ディレクトリは常にホームディレクトリになります。最後に使用したディレクトリを覚えておく方法はありますか?あるいは、他のほとんどのアプリケーションファイル選択ダイアログの標準である種類の検索や機能を可能にする「改善された」Javaファイル選択ダイアログがありますか?Javaファイル選択ダイアログに最後のディレクトリを記憶させる方法はありますか?

編集:投稿された回答は、 Javaアプリケーションを作成するための質問に対処しましたが、ユーザーのためではないと思います。おそらく、ユーザーがファイルブラウザのインタフェースを変更することはできませんが、そのことを知りたいと思います。重要な場合は、いくつかの具体的な例がありますが(Amazon AWSアップローダ)、ファイルブラウザを使用するほとんどのJavaアプリケーションでその動作が確認されています。

答えて

12

ファイルセレクタをクラス属性として格納します。再オープンすると、以下の内容が保存されます。

  1. ディレクトリ。
  2. ユーザーがスクロールしたディレクトリ内の場所。
  3. 選択したファイルフィルタ。
  4. サイズです。
  5. 画面上の位置。
  6. PLAF。
  7. ..

それが最後に使用されているディレクトリを覚えているようにする方法はありますか?もちろん

、あなたが実行間状態を持続意味ならば、は、代替の詳細を格納するフォーム、およびそれらを格納する場所/いくつかの方法があります。 Propertiesファイルを使用してJFrameの境界を格納する例については、this answerを参照してください。おそらくそれは、ファイルブラウザ・インタフェースを変更するユーザーのためにことはできません


..

何ユーザー '?アプリで使っている開発者を意味しますか?

多分あなたが必要とするのは、あなた自身のファイルチューザーを実装することでしょう。その場合は、FileBroコードから始めてください。

+0

+1そう簡単です。言い換えれば、1つしか作成せず、何度も繰り返してその状態(選択、場所など)を保持します。 –

+0

これは素晴らしいプロジェクトです。+1 – mKorbel

+0

「ユーザー」とは、開発者ではなくエンドユーザーのことです。私は頻繁に私が好きではないファイルブラウザインターフェイスを持つ他の人が書いたJavaアプリケーションを使用するように強制されます。ソースにアクセスできるとすれば、ファイルブラウザを変更してコードを再パッケージすることができます。そのためには、あなたの答えはかなり役に立ちます。 – keflavich

2

あなたは、アプリケーション内の最後のディレクトリの場所をキャッシュし、setCurrentDirectory

+0

で開くようにディレクトリ]ダイアログで簡単なコードを使用していました。 –

+1

これは、チューザーへの参照を保持するほど良い解決策ではありません。私の答えを見てください。 –

+2

@Andrewは、ファイルチューザーのインスタンスを保持することについてではなく、その場所を保持することについてだけです。 –

8

スイングJFileChooserでファイル選択がデフォルトの場所を指定して開くときの初期ディレクトリを設定する方法を持っていることができます。 setCurrentDirectory(File dir) ファイルを選択したら、getCurrentDirectoryを呼び出して選択したディレクトリを取得し、アプリの設定ファイルに保存することができます。

+0

これは低レベルの機能です、そうですか?これらの変数にアクセスしてユーザーとして変更する方法はありますか? – keflavich

+1

これはチューザーへの参照を保持するほど良い解決策ではありません。私の答えを見てください。 –

28

JFileChooserがそれを覚えていません。しかし、Javaは、プリファレンスAPIに

Preferences prefs = Preferences.userRoot().node(getClass().getName()); 
JFileChooser chooser = new JFileChooser(prefs.get(LAST_USED_FOLDER, 
    new File(".").getAbsolutePath())); 
int returnVal = chooser.showOpenDialog(null); 
if (returnVal == JFileChooser.APPROVE_OPTION) { 
    // do something 
    prefs.put(LAST_USED_FOLDER, chooser.getSelectedFile().getParent()); 
} 
+1

ここで、LAST_USED_FOLDERは定義されていますか? – Wronski

+2

これは定数です。ただ定義するだけです。 –

0

を提供し、ここで私は、私はあなたがスイングに話していると仮定し、最後の使用ディレクトリ

IDialogSettings dialogSettings = Activator.getDefault().getDialogSettings(); 
    String lastUsedPath = dialogSettings.get(IAntUIConstants.DIALOGSTORE_LASTANTHOME); 
    if (lastUsedPath == null) { 
     lastUsedPath = "c:\\"; 
    } 
    DirectoryDialog dialog = new DirectoryDialog(Display.getDefault().getActiveShell()); 
    dialog.setFilterPath(lastUsedPath); 
    String location = dialog.open(); 
    if (location == null) { 
     return; 
    } 
    dialogSettings.put(IAntUIConstants.DIALOGSTORE_LASTANTHOME, location); 
     AntCorePreferences preferences = AntCorePlugin.getPlugin().getPreferences(); 
     String defaultHome = preferences.getAntHome(); 
     if (location.equalsIgnoreCase(defaultHome)) { 
      location = null; 
     } 
関連する問題