Pregunta

Estoy tratando de cambiar de usar un JFileChooser a un FileDialog cuando mi aplicación se ejecuta en una 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 sea el tipo correcto de directorio. Solo quiero que FileDialog acepte cualquier directorio).

¿Fue útil?

Solución

Suponiendo que está decidido a usar FileDialog en lugar del JFileChooser portátil, debe establecer la propiedad del sistema para que FileDialogs creados 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.

Otros consejos

  

Estoy tratando de cambiar de usar un JFileChooser a un FileDialog cuando mi aplicación se ejecuta en una Mac para que use el selector de archivos OSx

Sugeriría que intentes permanecer en el mundo Swing y evitar el mundo más pesado de AWT. Hay formas de solucionar problemas con Swing L & amp; F en Mac, si ese es su problema. Eche un vistazo a esta publicación a una pregunta anterior , que enlaza a 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 preferiría quedarse con FileDialog , con mucho gusto eliminaré esta publicación.

Después de usar la solución más popular durante un tiempo:

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

No puedo resolver la traducción de Botones (solo en inglés) de la implementación nativa de FileDialog.

Entonces obtengo 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;

¡Disfruta!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top