2012-04-07 18 views
7

(Gracias de antemano! Por favor, hágamelo saber si usted necesita más información. Código de la muestra en la parte inferior.)Java JFileChooser con filtro para visualizar los directorios sólo supuestamente no muestran simplemente directorios

problema que estoy tratando de resuelve:

Estoy tratando de obtener este objeto JFileChooser para mostrar solo directorios (y no archivos), mediante el uso de un objeto javax.swing.filechooser.FileFilter que tiene esto en el archivo accept (Archivo) anulado método: return file.isDirectory();. Sin embargo, al menos en mi mac, no parece impedir que los archivos se muestren junto con los directorios (esto impide que se seleccionen archivos sin utilizar el método setFileSelectionMode()).

Pregunta

Me estoy perdiendo algo? Si no, ¿alguien ha encontrado esto antes?

mi entendimiento/supuestos:

  1. La magia debe suceder cuando se pasa de un objeto javax.swing.filechooser.FileFilter en el método de la JFileChooser setFileFilter().
  2. parece que mi JFileChooser con setFileFilter() se comporta como su uso de setSelectionMode(JFileChooser.DIRECTORIES_ONLY);

Código

import java.io.File; 
import javax.swing.filechooser.FileFilter; 

// inside a method that's adding this to a JPanel 

_fileChooser = new JFileChooser("."); 
_fileChooser.setControlButtonsAreShown(false); 
_fileChooser.setFileFilter(new FolderFilter()); 
// _fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
_panelMidLeft.add(_fileChooser); 

// an inner class, defined somewhere else in the class 

private class FolderFilter extends javax.swing.filechooser.FileFilter { 
    @Override 
    public boolean accept(File file) { 
    return file.isDirectory(); 
    } 

    @Override 
    public String getDescription() { 
    return "We only take directories"; 
    } 
} 

Gracias!

Alex

+0

Por favor, aprender [convenciones de nombres de Java] comunes (http://java.sun.com/ docs/books/jls/second_edition/html/names.doc.html # 73307) (específicamente el caso utilizado para los nombres) para los nombres de clases, métodos y atributos y usarlo de manera consistente. –

+0

Gracias por la sugerencia. Además del uso de '_' (que en mi caso era indicar las variables de instancia), ¿te importaría señalar algunas cosas, mientras estoy revisando los documentos en la web sobre las convenciones? –

Respuesta

15

Tu código funciona para mí. Mi SSCCE:

import java.io.File; 
import javax.swing.JFileChooser; 

public class ShowDirectoriesOnly { 
    public static void main(String[] args) { 
     JFileChooser fileChooser = new JFileChooser("."); 
     fileChooser.setControlButtonsAreShown(false); 
     fileChooser.setFileFilter(new FolderFilter()); 
     fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     fileChooser.showOpenDialog(null); 
    } 

    private static class FolderFilter extends javax.swing.filechooser.FileFilter { 
     @Override 
     public boolean accept(File file) { 
     return file.isDirectory(); 
     } 

     @Override 
     public String getDescription() { 
     return "We only take directories"; 
     } 
    } 
} 

Si todavía tiene problemas, lo mejor es crear su propia SSCCE que demuestra su problema.

Edición

Captura de pantalla de cómo se ve en OS X con JDK1.7

OS X screenshot

+2

Este código me muestra un JFileChooser donde todos los archivos están atenuados y no se pueden seleccionar, pero aún son visibles (OS X, JDK 1.7) +1 para el SSCCE, hace que sea muy simple probar – Robin

+0

@Robin: gracias por el aviso. En Windows 7, no veo los archivos, solo los directorios. Me pregunto si esto podría ser dependiente de L & F. –

+0

Gracias Hovercraft lleno de anguilas y Robin. Sí, aún puedo ver los archivos en mi mac, usando su ejemplo.+1 en el ejemplo de SSCCE y definitivamente haré eso también en mis futuras preguntas de SO. (Esperaba poder publicar una imagen aquí, pero resulta que necesito 10 puntos de reputación o más antes de poder hacerlo en SO. Vaya). –

Cuestiones relacionadas