【问题标题】:FileNameExtensionFilter adding file filters repeatedlyFileNameExtensionFilter 重复添加文件过滤器
【发布时间】:2016-08-29 17:30:57
【问题描述】:

我有一个如下所示的文件选择器演示,假设我已经在 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();
}

当我第一次单击浏览按钮时,它看起来很完美,但在第二次时,文件过滤器添加了现有过滤器。何避免这种情况!请提供任何帮助。提前致谢!!

【问题讨论】:

  • 所以,我假设如果您有一个名为chooser 的实例字段,那么每次调用ActionListener 时,它都会一遍又一遍地重新配置对话框。相反,只需配置一次并简单地重复使用它
  • 要么只在创建时添加过滤器,要么在每次显示时重新创建选择器
  • 是的,你们都说对了...谢谢哥们

标签: java swing filechooser filefilter


【解决方案1】:

所以,我假设如果您有一个名为 chooser 的实例字段,那么每次调用 ActionListener 时,它都会一遍又一遍地重新配置对话框。相反,只需配置一次并简单地重复使用它

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();
        }
    }
}

这基本上是一个延迟加载的示例,其中 JFileChooser 在实际使用之前不会创建,但它会根据需要重新使用,从而使其更快

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2020-03-14
    • 2011-03-04
    相关资源
    最近更新 更多