2012-02-20 13 views
7

Buenas tardes todos,¿Cómo seleccionar FileFilter por defecto al crear un cuadro de diálogo JFileChooser?

que tiene una instancia de un javax.swing.JFileChooser y añadió algunas choosable javax.swing.FileFilter s utilizando addChoosableFileFilter.

Sin embargo, cuando muestro el cuadro de diálogo (a través del showSaveDialog), mi FileFilter elegible personalizado no está seleccionado de forma predeterminada.

quería para seleccionar el filtro "Archivos de imagen" por defecto ..

¿Cómo seleccionamos un filtro predeterminado para el diálogo javax.swing.JFileChooser?

SSCCEd:

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new java.lang.Runnable() { 
     @Override 
     public void run() { 
      new javax.swing.JFrame() { 
       { 
        final javax.swing.JButton button = new javax.swing.JButton("Save"); 
        button.addMouseListener(new java.awt.event.MouseAdapter() { 
         @Override 
         public void mousePressed(java.awt.event.MouseEvent e) { 
          new javax.swing.JFileChooser() { 
           { 
            addChoosableFileFilter(NewFileFilter("Text Files", new String[] { "txt" })); 
            addChoosableFileFilter(NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" })); 
            addChoosableFileFilter(NewFileFilter("Audio Files", new String[] { "mp3" })); 
            addChoosableFileFilter(NewFileFilter("Video Files", new String[] { "mp4", "avi" })); 
            showSaveDialog(button); 
           } 

           private javax.swing.filechooser.FileFilter NewFileFilter(final String desc, final String[] allowed_extensions) { 
            return new javax.swing.filechooser.FileFilter() { 
             @Override 
             public boolean accept(java.io.File f) { 
              if (f.isDirectory()) { 
               return true; 
              } 
              int pos = f.getName().lastIndexOf('.'); 
              if (pos == -1) { 
               return false; 
              } else { 
               String extension = f.getName().substring(pos + 1); 
               for (String allowed_extension : allowed_extensions) { 
                if (extension.equalsIgnoreCase(allowed_extension)) { 
                 return true; 
                } 
               } 
               return false; 
              } 
             } 

             @Override 
             public String getDescription() { 
              return desc; 
             } 
            }; 
           } 
          }; 
         } 
        }); 
        add(button); 
        setSize(100, 100); 
        setVisible(true); 
       } 
      }; 
     } 
    }); 
} 

Respuesta

13

Usando setFileFilter():

FileFilter ff = NewFileFilter("Image Files", new String[] { "gif", "png", "jpg" }); 
addChoosableFileFilter(ff); 
setFileFilter(ff); 

¿Por qué está la subclasificación del selector de archivos, en lugar de usarlo? ¿Y por qué no respetas las convenciones de nomenclatura de Java (los métodos comienzan con una letra minúscula)? Y por qué no respetas la política de enhebrado de Swing, que dice que los componentes de Swing deben usarse solo en el EDT.

+0

Se agregó javax.swing.SwingUtilities.invokeLater en el ejemplo. ¿Por qué deberían los métodos ser camelCased y no PascalCased? – Pacerier

+0

[Convenciones del código para Java] (http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html) – mKorbel

+0

Porque esa es la convención estándar en Java. –

0
FileFilter filter = new FileNameExtensionFilter("Data Files", "*.dat"); 
JFileChooser fc = new JFileChooser(); 
fc.addChoosableFileFilter(filter); 
fc.setMultiSelectionEnabled(false); 
+1

[Formatee su código correctamente] (https://stackoverflow.com/editing-help), agregue algunos detalles a su respuesta. – Dwhitz

Cuestiones relacionadas