2009-08-03 21 views
9

Estoy tratando de pasar de utilizar JFileChooser a FileDialog cuando mi aplicación se ejecuta en un Mac para que use el selector de archivos OS X. Hasta ahora tengo el siguiente código:¿Cómo puedo hacer que un FileDialog java acepte directorios como su FileType en 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()); 

¿Qué debo poner para la pregunta? para que mi selector de archivos permita que cualquier directorio sea la entrada para el selector de archivos (el método que sigue ya verifica para asegurarse de que el directorio es el tipo correcto de directorio, solo quiero que FileDialog acepte cualquier directorio).

Respuesta

10

Suponiendo que está decidido a utilizar el FileDialog en lugar del JFileChooser portátil, debe configurar la propiedad del sistema para que los archivos creados con FileDialog sean para directorios.

La propiedad en cuestión es apple.awt.fileDialogForDirectories.

Por lo tanto, simplemente haga lo siguiente:

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

Cabe señalar que esto sin embargo no es portátil, ya que usted está buscando para reemplazar el JFileDialog portátil, supongo que no es un problema.

+0

¡Eso es perfecto gracias! – Mike2012

+3

¿Hay un equivalente para Windows? – ThePrince

1

Estoy tratando de pasar de utilizar un JFileChooser a un FileDialog cuando mi aplicación se ejecuta en un Mac para que se utilice el selector de archivos OSx

sugeriría que intenta mantenerse en el mundo Swing y huyendo del mundo de peso pesado de AWT. Hay formas de evitar problemas con el Swing L & F en Mac, si ese es su problema. Eche un vistazo al this post to an earlier question, que enlaza con un sitio que muestra cómo obtener los iconos correctos de Mac en el selector de archivos.

Disculpe por no responder exactamente su pregunta. Si hay otras razones por las que prefiere quedarse con FileDialog, con mucho gusto eliminaré esta publicación.

+0

Estoy de acuerdo: el JFiloeChooser es una opción mucho mejor, y su pregunta suena más como un problema de L & F que otra cosa. – aperkins

0

Después de usar solución más popular para rato:

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

no puedo resolver traducción de botones (sólo en Inglés) de implementación nativa FileDialog.

por lo que obtener una solución que funciona perfectamente en 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; 

Enjoy!

Cuestiones relacionadas