2012-02-20 7 views
7

Dzień dobry wszystkimJak wybrać domyślny FileFilter podczas tworzenia okna dialogowego JFileChooser?

mam instancję javax.swing.JFileChooser i dodałem kilka wybieralne javax.swing.FileFilter s używając addChoosableFileFilter.

Jednak po wyświetleniu okna dialogowego (poprzez showSaveDialog) mój niestandardowy możliwy do wybrania FileFilter nie jest domyślnie zaznaczony.

Chciałem wybrać filtr „pliki obrazów” domyślnie ..

Jak wybrać filtr domyślny dialogowym 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); 
       } 
      }; 
     } 
    }); 
} 

Odpowiedz

13

Korzystanie setFileFilter():

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

Czemu instacji wyboru pliku, zamiast po prostu go używają? I dlaczego nie szanujesz konwencji nazewnictwa Javy (metody zaczynają się od małej litery)? I dlaczego nie szanujesz polityki Swinga, która mówi, że komponenty Swing muszą być używane tylko w EDT.

+0

Dodano javax.swing.SwingUtilities.invokeLater w przykładzie. Dlaczego powinny być metody CamelCased, a nie PascalCased? – Pacerier

+0

[Konwencje dotyczące kodu Java] (http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html) – mKorbel

+0

Ponieważ jest to standardowa konwencja w języku Java. –

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

[Proszę poprawnie sformatować swój kod] (https://stackoverflow.com/editing-help), dodaj trochę szczegółów do swojej odpowiedzi. – Dwhitz

Powiązane problemy