2009-08-03 5 views
9

Ich versuche, von der Verwendung eines JFileChooser zu einem FileDialog zu wechseln, wenn meine App auf einem Mac ausgeführt wird, so dass sie die OS X-Dateiauswahl verwenden wird. Bisher habe ich folgenden Code:Wie kann ich einen Java FileDialog veranlassen, Verzeichnisse als FileType in OS X zu akzeptieren?

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

Was würde ich für die Frage einlegen? so dass mein Dateiwähler jedes Verzeichnis als Eingabe für den Dateiwähler zulässt (die Methode, die folgt, überprüft bereits, ob das Verzeichnis die richtige Art von Verzeichnis ist, das ich nur möchte, dass der FileDialog jedes Verzeichnis akzeptiert).

Antwort

10

Angenommen, Sie sind entschlossen, den FileDialog anstelle des tragbaren JFileChooser zu verwenden, müssen Sie die Systemeigenschaft so festlegen, dass FileDialogs für Verzeichnisse erstellt wird.

Die fragliche Eigenschaft ist apple.awt.fileDialogForDirectories.

So einfach wie folgt vor:

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"); 

Es sollte beachtet werden, dass dies nicht tragbar ist, aber da Sie die tragbare JFileDialog zu ersetzen sucht, gehe ich davon aus, das ist kein Problem.

+0

Das ist perfekt danke! – Mike2012

+3

Gibt es eine Entsprechung für Windows? – ThePrince

1

ich von der Verwendung eines JFileChooser zu einem File-Dialog zu wechseln versuchen, wenn meine Anwendung auf einem Mac laufen wird, so dass es die OSx Dateiauswahl

verwenden würde ich vorschlagen, dass Sie versuchen, zu bleiben in der Swing-Welt und scheue sich vor der schwereren Welt von AWT. Es gibt Möglichkeiten, Probleme mit dem Swing L & F auf Macs zu umgehen, wenn das Ihr Problem ist. Werfen Sie einen Blick auf this post to an earlier question, die auf eine Website verweist, die zeigt, wie Sie die richtigen Mac-Symbole in der Dateiauswahl erhalten.

Entschuldigung, dass ich Ihre Frage nicht genau beantworte. Wenn es andere Gründe gibt, warum Sie lieber bei FileDialog bleiben möchten, werde ich diesen Beitrag gerne entfernen.

+0

Ich stimme zu - der JFiloeChooser ist eine viel bessere Option, und seine Frage klingt mehr wie ein L & F Problem als alles andere. – aperkins

0

Nach der Verwendung beliebteste Lösung für während:

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

Ich kann nicht Übersetzung von Buttons (nur in englischer Sprache) von nativen File Implementierung lösen.

So bekomme ich eine Abhilfe, die perfekt auf macOS funktioniert:

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; 

Viel Spaß!