2016-05-04 18 views
0

Ich habe eine Demo-Datei Chooser wie unten, wird angenommen, ich habe innerhalb browseButton.addActionListener codiert()FileNameExtensionFilter Hinzufügen von Dateifilter wiederholt

FileFilter docx = new FileNameExtensionFilter("MS Word file(.docx)", "docx"); 
FileFilter doc = new FileNameExtensionFilter("MS Word file(.doc)", "doc"); 
FileFilter pdf = new FileNameExtensionFilter("Pdf file(.pdf)", "pdf"); 
chooser.addChoosableFileFilter(docx); 
chooser.addChoosableFileFilter(doc); 
chooser.addChoosableFileFilter(pdf); 
chooser.setFileFilter(docx); 
chooser.setAcceptAllFileFilterUsed(false); 
int ret = this.chooseLeft.showOpenDialog(chooserFrame); 
if(ret == JFileChooser.APPROVE_OPTION){ 
try{ 
File leftFile = this.chooseLeft.getSelectedFile(); 
leftfileName = leftFile.getName().toLowerCase(); 
}catch(Exception e){ 
e.printStackTrace(); 
} 

Wenn ich Schaltfläche Durchsuchen ersten Mal klicken sieht es perfekt, aber in der 2. Mal, wenn die Dateifilter mit vorhandenen Filtern hinzugefügt. Um das zu vermeiden !! Irgendwelche Hilfe bitte. Danke im Voraus!!

+0

Also nehme ich an, wenn Sie ein Instanzfeld namens 'chooser' haben, so wird jedesmal, wenn der' ActionListener' aufgerufen wird, der Dialog immer wieder neu konfiguriert. Stattdessen, konfigurieren Sie es einmal und einfach wieder verwenden – MadProgrammer

+0

Entweder Sie sollten Filter nur bei der Erstellung hinzufügen oder neu Auswahl jedes Mal, wenn es angezeigt werden sollte –

+0

ja Sie beide korrigieren ... Danke Freunde – Saravanan

Antwort

1

Also, ich nehme an, wenn Sie ein Instanz-Feld chooser haben, so jedes Mal die ActionListener aufgerufen wird, konfiguriert es den Dialog immer und immer wieder. Stattdessen konfigurieren Sie es einmal und einfach wiederverwenden es

private JFileChooser chooser; 
//... 
protected JFileChooser getFileChooser() { 
    if (chooser == null) { 
     chooser = new JFileChooser(...); 
     FileFilter docx = new FileNameExtensionFilter("MS Word file(.docx)", "docx"); 
     FileFilter doc = new FileNameExtensionFilter("MS Word file(.doc)", "doc"); 
     FileFilter pdf = new FileNameExtensionFilter("Pdf file(.pdf)", "pdf"); 
     chooser.addChoosableFileFilter(docx); 
     chooser.addChoosableFileFilter(doc); 
     chooser.addChoosableFileFilter(pdf); 
     chooser.setFileFilter(docx); 
     chooser.setAcceptAllFileFilterUsed(false); 
    } 
    return chooser; 
} 
//... 
public void actionPerformed(ActionEvent evt) { 
    JFileChooser chooser = getFileChooser(); 
    int ret = chooser.showOpenDialog(chooserFrame); 
    if(ret == JFileChooser.APPROVE_OPTION){ 
     try{ 
      File leftFile = chooser.getSelectedFile(); 
      leftfileName = leftFile.getName().toLowerCase(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

Dies ist im Grunde ein Beispiel für verzögertes Laden, wo die JFileChooser nicht erstellt wird, bis es tatsächlich verwendet wird, aber es wird wieder verwendet, wie gebraucht, was macht es schneller