OS Xでjava FileDialogがディレクトリをFileTypeとして受け入れるようにするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1224714

質問

Macでアプリを実行しているときにJFileChooserからFileDialogに切り替えて、OS Xファイルチューザーを使用しようとしています。これまでのところ、次のコードがあります。

    FileDialog fd = new FileDialog(this);
    fd.setDirectory(_projectsBaseDir.getPath());
    fd.setLocation(50,50);
    fd.setFile(?);
    fd.setVisible(true);
    File selectedFile = new File(fd.getFile());

質問には何を入れますか?私のファイルチューザーは、任意のディレクトリをファイルチューザーの入力として許可します(以下の方法では、ディレクトリが正しい種類のディレクトリであることを確認し、FileDialogに任意のディレクトリを受け入れます)。

役に立ちましたか?

解決

ポータブルJFileChooserの代わりにFileDialogを使用することに決めた場合、作成されたFileDialogsがディレクトリ用になるようにシステムプロパティを設定する必要があります。

問題のプロパティは apple.awtです。 fileDialogForDirectories

次の手順を実行します。

System.setProperty("apple.awt.fileDialogForDirectories", "true");
FileDialog fd = new FileDialog(this); 
fd.setDirectory(_projectsBaseDir.getPath()); 
fd.setLocation(50,50);
fd.setVisible(true); 
File selectedFile = new File(fd.getFile());
System.setProperty("apple.awt.fileDialogForDirectories", "false");

これは移植性がないことに注意する必要がありますが、移植性のあるJFileDialogを置き換えるために探しているので、それは問題ではないと思います。

他のヒント

  

Macでアプリを実行しているときにJFileChooserをFileDialogに切り替えて、OSxファイルチューザーを使用しようとしている

Swingの世界にとどまり、AWTのより重い世界から遠ざかることをお勧めします。 Mac上のSwing L& Fの問題を回避する方法があります(それが問題である場合)。 以前の質問へのこの投稿をご覧ください。ファイル選択で正しいMacアイコンを取得する方法。

あなたの質問に正確に答えていないことを許してください。 FileDialog にとどまることを望む他の理由がある場合は、この投稿を削除します。

しばらくの間、最も一般的なソリューションを使用した後:

System.setProperty("apple.awt.fileDialogForDirectories", "true");

ネイティブFileDialog実装のボタンの翻訳(英語のみ)を解決できません。

だから、macOSで完全に動作する回避策を得る:

try {
    Process process = Runtime.getRuntime().exec(new String[]{//
        "/usr/bin/osascript", //
        "-e", //
        "set selectedFolder to choose folder\n"//
        + "return POSIX path of selectedFolder"
    });
    int result = process.waitFor();
    if (result == 0) {
        String selectedFolder = new BufferedReader(new InputStreamReader(process.getInputStream())).readLine();
        return new File(selectedFolder);
    }
} catch (Exception ex) {
}

return null;

お楽しみください

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top