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

我試圖通過設置fileChooser.setAcceptAllFileFilterUsed(false);來過濾文件過濾器中的文件fileChooser.setAcceptAllFileFilterUsed(false); . “所有文件”選項從FileChooser消失,但所有文件仍然可見,除非您從 PDF 文檔、Office 或圖像中選擇一個選項。 我只想在打開文件選擇器時使用我的 3 個自定義過濾器。

例如,如果您想過濾JFileChooser以嚴格顯示最常見的圖像文件,您可以使用以下內容:

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

第一個參數是描述(在底部選擇時顯示的內容),第二個參數是非正式的文件擴展名。

您可以使用FileNameExtensionFilter將允許的擴展名添加到FileChooser對話框。 下面是一個例子:

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

有關更多信息,請參閱 Javadocs: FileNameExtensionFilter

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

就我而言,我不得不把

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

在對該方法的所有其他調用之后

addChoosableFileFilter(...);

使 setAcceptAllFileFilterUsed(false) 起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM