¿Cómo puedo hacer que un FileDialog java acepte directorios como su FileType en OS X?
macos look-and-feel (3)
Estoy intentando pasar de usar 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:
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é pondría 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).
Suponiendo que está decidido a utilizar el FileDialog en lugar del JFileChooser portátil, debe establecer la propiedad del sistema para que los archivos creados con FileDialog sean para directorios.
La propiedad en cuestión es apple.awt.fileDialogForDirectories
.
Así que simplemente haz 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 no es portátil, sin embargo, dado que está buscando reemplazar el JFileDialog portátil, supongo que eso no es un problema.
Estoy tratando de pasar de usar JFileChooser a FileDialog cuando mi aplicación se ejecuta en un Mac para que use el selector de archivos OSx
Sugeriría que intentes quedarte en el mundo de Swing y alejarte del mundo de peso pesado de AWT. Hay formas de evitar problemas con Swing L & F en Mac, si ese es su problema. Eche un vistazo a esta publicación a una pregunta anterior , que enlaza con un sitio que muestra cómo obtener los iconos de Mac correctos en el selector de archivos.
Discúlpeme por no responder exactamente su pregunta. Si hay otras razones por las que preferiría quedarse con FileDialog
, con mucho gusto eliminaré esta publicación.
Después de usar la solución más popular por tiempo:
System.setProperty("apple.awt.fileDialogForDirectories", "true");
No puedo resolver la traducción de los botones (solo en inglés) de la implementación nativa de FileDialog.
Entonces recibo una solución alternativa 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;
¡Disfrutar!