Reputation: 77
I have a file chooser demo like below, Assume I have coded inside browseButton.addActionListener()
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();
}
When I click browse button first time it looks perfectly, but in 2nd time the file filters added with existing filters. Ho to avoid that!! Any help please. Thanks in advance!!
Upvotes: 1
Views: 5848
Reputation: 347194
So, I assume if you have an instance field called chooser
, so each time the ActionListener
is called, it reconfigures the dialog over and over again. Instead, configure it once and simple re-use it
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();
}
}
}
This is basically an example of lazy loading, where the JFileChooser
isn't created until it's actually used, but it gets re-used as needed, which makes it faster
Upvotes: 3