如何将java中的文件选择器限制为特定文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18575655/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 09:09:24  来源:igfitidea点击:

How to restrict file choosers in java to specific files

javaswingjfilechooser

提问by julihx

private void openMenuActionPerformed(java.awt.event.ActionEvent evt) {

    DBmanager db = new DBmanager();
    if (!db.getCurrentUser().equals("Admin")) {
        JOptionPane.showMessageDialog(this, "You are Not Allowed to Run Applications");
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("PDF Documents", "pdf"));
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("MS Office Documents", "docx", "xlsx", "pptx"));
        fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Images", "jpg", "png", "gif", "bmp"));
        fileChooser.setAcceptAllFileFilterUsed(false);
        int returnVal = fileChooser.showOpenDialog(this);

        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();

            if (Desktop.isDesktopSupported()) {
                try {
                    Desktop.getDesktop().open(file);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    } else if (db.getCurrentUser().equals("Admin")) {
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setAcceptAllFileFilterUsed(true);
        int returnVal = fileChooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            if (Desktop.isDesktopSupported()) {
                try {
                    Desktop.getDesktop().open(file);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }// TODO add your handling code here:
}

Hi guys....I'm trying to filter files in a file filter by setting fileChooser.setAcceptAllFileFilterUsed(false);. The "all files" option disappears from the FileChooserbut all files remain visible unless you select an option from PDF documents,ms Office or images.I want to have only my 3 custom filters upon opening the file chooser.

大家好....我正在尝试通过设置过滤文件过滤器中的文件fileChooser.setAcceptAllFileFilterUsed(false);。“所有文件”选项从 中消失,FileChooser但所有文件仍然可见,除非您从 PDF 文档、MS Office 或图像中选择一个选项。我只想在打开文件选择器时使用我的 3 个自定义过滤器。

采纳答案by Josh M

For example, if you want to filter your JFileChooserto strictly display most commonly found image files, you would use something like this:

例如,如果你想过滤你的JFileChooser以严格显示最常见的图像文件,你可以使用这样的东西:

FileNameExtensionFilter filter = new FileNameExtensionFilter("Image Files", "jpg", "png", "gif", "jpeg");
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(filter);

The first argument is the description (what gets displayed upon selection at the bottom) and the second argument are the informal file extensions.

第一个参数是描述(在底部选择时显示的内容),第二个参数是非正式的文件扩展名。

回答by Grodriguez

You can use FileNameExtensionFilterto add allowed extensions to your FileChooserdialog. Here's an example:

您可以使用FileNameExtensionFilter将允许的扩展添加到FileChooser对话框中。下面是一个例子:

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

For more info, please refer to the Javadocs: FileNameExtensionFilter

有关更多信息,请参阅 Javadocs:FileNameExtensionFilter

回答by Nguy?n Minh V?

In my case, I had to put the

就我而言,我不得不把

setFileFilter(          
    new FileNameExtensionFilter("Default file filter", ...)
);

after all other calls to the method

在对该方法的所有其他调用之后

addChoosableFileFilter(...);

to make setAcceptAllFileFilterUsed(false) works.

使 setAcceptAllFileFilterUsed(false) 起作用。

回答by Suma

This works fine in java8.1

这在 java8.1 中工作正常

JFileChooser dbfilechooser = new JFileChooser();
FileNameExtensionFilter filter1 = 
  new FileNameExtensionFilter("xls","xls");
FileNameExtensionFilter filter2 = 
  new FileNameExtensionFilter("xlsx", "xlsx");
FileNameExtensionFilter filter3 = 
  new FileNameExtensionFilter("csv", "csv");

dbfilechooser.addChoosableFileFilter(filter1);
dbfilechooser.addChoosableFileFilter(filter2);
dbfilechooser.addChoosableFileFilter(filter3);