【问题标题】:Simple JFileChooser FileFilter not working简单的 JFileChooser FileFilter 不起作用
【发布时间】:2020-04-30 18:08:03
【问题描述】:

以下是使用从this 派生的JFileChooser 将文件保存在用户输入目录上的简单代码,正如this 另一个stackoverflow 问题的答案所建议的那样。但是,此代码不会按预期工作,因为文件过滤器不会显示所有定义的过滤器。

public static void main(String[] args) {
    JFrame main = new JFrame();

    JButton saveto = new JButton("save");
    saveto.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent e) 
        { 
            JFileChooser chooser = new JFileChooser();
            int retval = chooser.showDialog(chooser, "Save");

            FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");
            chooser.setFileFilter(filter);

            if (retval == JFileChooser.APPROVE_OPTION) 
            {
                File f_sample = chooser.getSelectedFile();
                System.out.println(f_sample + ".csv");
            }
        }
    });

    main.add(saveto);
    main.setSize(300,300);
    main.setLocationRelativeTo(null);
    main.setVisible(true);
    main.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}

文件f_sample 也将包含null,但删除过滤器将导致文件f_sample 按预期工作,包含所选文件。所以我假设故障的原因在FileFilter

文件过滤器有什么问题?我怎样才能让它发挥作用?请注意,代码来自 Oracle 教程,稍作修改。

最后一刻修改

所以我使用chooser.addChoosableFileFilter(filter); 而不是chooser.setFileFilter(filter);,文件f_sample 现在包含用户定义的文件。但是,定义的过滤器仍然不会显示在JFileChooser 窗口中。

【问题讨论】:

    标签: java swing jfilechooser filefilter


    【解决方案1】:

    您在设置过滤器之前显示您的选择器

    改成

    JFileChooser chooser = new JFileChooser();
    
    FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", 
                                                                            "jpg", "gif");
    chooser.setFileFilter(filter);
    int retval = chooser.showDialog(chooser, "Save");
    
    // etc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2021-05-18
      • 2018-11-14
      相关资源
      最近更新 更多