Siento que debería haber una manera simple de hacer esto pero no puedo resolverlo. Tengo un JFileChooser que permite al usuario seleccionar directorios. Quiero mostrar todos los archivos en los directorios para dar contexto al usuario, pero solo los directorios deben aceptarse como selecciones (tal vez el botón Abrir se desactivará cuando se seleccione un archivo). ¿Hay una manera fácil de hacer esto?JFileChooser selecciona el directorio pero muestra los archivos
Respuesta
Reemplace el método approveSelection(). Algo así como:
JFileChooser chooser = new JFileChooser(new File("."))
{
public void approveSelection()
{
if (getSelectedFile().isFile())
{
// beep
return;
}
else
super.approveSelection();
}
};
AFAIK JFileChooser separa el filtrado de archivos (lo que se puede ver, muy configurable) del filtrado de selección (lo que se puede elegir).
La configuración de filtrado de la selección es mucho más limitado, pero que sabemos, se puede optar por permitir que sólo los directorios o sólo los archivos que se seleccionan con setFileSelectionMode()
Creo que la mejor solución es simplemente para permitir al usuario seleccionar un marcador archivo o un directorio. Y si el usuario selecciona un archivo, simplemente use el directorio donde se encuentra ese archivo.
Ver setFileSelectionMode()
en How to Use File Choosers:
setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
Adición: El efecto se puede ver por la línea 73 del presente descomentando FileChooserDemo
, pero parece ser dependiente de la plataforma.
Adición: Si se utiliza FILES_AND_DIRECTORIES
, considere cambiar el texto del botón en consecuencia:
chooser.setApproveButtonText("Choose directory");
Como el efecto es L & F dependiente, considere el uso de DIRECTORIES_ONLY
en plataformas que ya cumplen con los requisitos de interfaz de usuario:
if (System.getProperty("os.name").startsWith("Mac OS X")) {
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
} else {
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
}
Pero eso ocultará archivos, que es lo que él no quiere. –
@mmyers: Muestra los archivos en gris en el ejemplo citado anteriormente. YMMV – trashgod
Según lo que dice el tutorial, parece que depende de laf. –
Mi solución es una combinación entre las respuestas de camickr y trashgod:
+1 ¡Parece que estoy en buena compañía! Actualicé mi respuesta para reflejar este enfoque combinado. – trashgod
¡Muy bien! 'JFileChooser.FILES_AND_DIRECTORIES' es ** importante **! Sin él, (como en la respuesta de 'camickr') la solución es ** inútil **, como probé. –
La solución de anulación approveSelection
puede ser molesta para ciertos usuarios.
A veces, un usuario simplemente hace clic en un archivo en un directorio sin ninguna razón (a pesar de que desea seleccionar el directorio y no el archivo). Si eso sucede, el usuario estaría (kind-a) atrapado en el JFileChooser
ya que el approveSelection
fallará, incluso si anula la selección del archivo. Para evitar esta molestia, esto es lo que hago:
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(
JFileChooser.FILES_AND_DIRECTORIES);
int option = fileChooser.showDialog(null,
"Select Directory");
if (option == JFileChooser.APPROVE_OPTION) {
File f = fileChooser.getSelectedFile();
// if the user accidently click a file, then select the parent directory.
if (!f.isDirectory()) {
f = f.getParentFile();
}
System.out.println("Selected directory for import " + f);
}
Selección del directorio, incluso cuando el usuario selecciona un archivo resulta en una mejor usabilidad en mi opinión.
Mantenga el fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY)
y uso:
File[] selectedFiles = fileChooser.getSelectedFile().listFiles();
- 1. Obtener todos los nombres de los archivos en el directorio usando JFileChooser?
- 2. JFileChooser getCurrentDirectory devolviendo el directorio actual incorrecto?
- 3. JavaFX FileChooser selecciona archivos y/o directorios?
- 4. Abrir archivos con JFileChooser
- 5. ¿Cómo restrinjo JFileChooser a un directorio?
- 6. configure el JFileChooser para abrir el directorio actual
- 7. JFileChooser - ¿filtros de archivos múltiples?
- 8. Comando Unix para eliminar todos los archivos en un directorio pero conservar el directorio
- 9. Objetivo c: Cómo eliminar solo todos los archivos de un directorio pero conservar el directorio
- 10. JFileChooser - configurar el directorio a una ruta en un archivo
- 11. Cómo prohibir la edición del nombre del directorio en JFileChooser?
- 12. Copie todos los archivos en el directorio
- 13. JFileChooser elija el archivo vacío
- 14. JFileChooser para abrir archivos de texto múltiple
- 15. In nant, ¿cómo eliminar los contenidos de un directorio, pero no el directorio en sí?
- 16. .htaccess proteger el directorio de la contraseña pero permitir los tipos de archivos de imagen
- 17. Obtener la ruta de un directorio usando JFileChooser
- 18. Apache no muestra los archivos README.TXT en la lista del directorio. ¿Cómo puedo habilitarlo?
- 19. Alternativa a JFileChooser
- 20. TortoiseGit muestra el directorio limpio como conflictivo
- 21. TortoiseSVN no muestra el menú contextual en los archivos
- 22. Visual Studio no muestra el contenido de los archivos
- 23. Egit muestra todos los archivos como cambiados
- 24. Proceso por lotes todos los archivos en el directorio
- 25. Cambiar el directorio donde se crean los archivos .pyc
- 26. lista de PHP todos los archivos en el directorio
- 27. XCode 4.3.2 muestra archivos ocultos
- 28. Python-FTP descarga todos los archivos en el directorio
- 29. ¿Cómo atravesar los archivos en un directorio?
- 30. Guarde los archivos de SharedPreferences en el directorio personalizado u obtenga el directorio predeterminado de SharedPreferences
bastante pobre UX. –