简体   繁体   English

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

[英]How to restrict file choosers in java to specific files?

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:
}

I am trying to filter files in a file filter by setting fileChooser.setAcceptAllFileFilterUsed(false);我试图通过设置fileChooser.setAcceptAllFileFilterUsed(false);来过滤文件过滤器中的文件fileChooser.setAcceptAllFileFilterUsed(false); . . The "all files" option disappears from the FileChooser but all files remain visible unless you select an option from PDF documents,ms Office or images. “所有文件”选项从FileChooser消失,但所有文件仍然可见,除非您从 PDF 文档、Office 或图像中选择一个选项。 I want to have only my 3 custom filters upon opening the file chooser.我只想在打开文件选择器时使用我的 3 个自定义过滤器。

For example, if you want to filter your JFileChooser to 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.第一个参数是描述(在底部选择时显示的内容),第二个参数是非正式的文件扩展名。

You can use FileNameExtensionFilter to add allowed extensions to your FileChooser dialog.您可以使用FileNameExtensionFilter将允许的扩展名添加到FileChooser对话框。 Here's an example:下面是一个例子:

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

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

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) 起作用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM