简单的JFileChooser FileFilter不起作用

问题描述 投票:2回答:1

以下是一个简单的代码,用于使用从JFileChooser派生的this将文件保存在用户输入目录中,如另一个堆栈溢出问题的this答案所建议。但是,此代码将无法正常工作,因为文件过滤器不会显示所有定义的过滤器。

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也将包含空值,但是删除过滤器将导致文件f_sample正常工作,其中包含选定的文件。因此,我认为故障原因在FileFilter

文件过滤器出了什么问题?我该如何运作呢?请注意,该代码来自Oracle教程,进行了少量修改。

最后一分钟修改

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

java swing jfilechooser filefilter
1个回答
1
投票

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

更改为

JFileChooser chooser = new JFileChooser();

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

// etc
© www.soinside.com 2019 - 2024. All rights reserved.