首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 檔案選擇器與自訂檔案過濾器實作

     編輯:Java 相關知識

前言

在桌面應用程式中,「開啟檔案」與「儲存檔案」對話框是最常見的使用者介面元件。Java Swing 提供 JFileChooser 元件,並透過 FileFilter 抽象類別讓開發者自訂檔案過濾邏輯。本文透過兩個類別 MyFilter 與 FileChooserDemo,完整示範如何只顯示 .java 副檔名的檔案,並記錄使用者操作結果。

自訂檔案過濾器:MyFilter

核心邏輯

public class MyFilter extends FileFilter {
    public boolean accept(File f) {
        if (f.isDirectory()) return true; // 目錄永遠顯示
        String ext = getExtension(f);
        return "java".equals(ext);        // 僅接受 .java 檔
    }
    public String getDescription() { return "Java"; }
    // 取得副檔名小寫
    public static String getExtension(File f) { ... }
}
  • accept():回傳 true 表示該檔案/目錄會出現在清單中。目錄必須回傳 true,否則使用者無法瀏覽資料夾結構。
  • getDescription():顯示在對話框「檔案類型」下拉選單的說明文字。
  • getExtension():工具方法,擷取副檔名並轉小寫比對。

檔案選擇器示範:FileChooserDemo

元件配置

fc = new JFileChooser(".");           // 起始目錄為當前目錄
fc.addChoosableFileFilter(new MyFilter()); // 加入自訂過濾器
openButton = new JButton("開啟檔案", createImageIcon("images/Open16.gif"));
saveButton = new JButton("儲存檔案", createImageIcon("images/Save16.gif"));

版面採用 BorderLayout:上方按鈕列、中央 JTextArea(置於 JScrollPane)顯示操作日誌。

事件處理

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == openButton) {
        int returnVal = fc.showOpenDialog(FileChooserDemo.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            log.append("開啟檔案: " + fc.getSelectedFile().getName() + "\n");
        } else {
            log.append("開啟檔案被使用者取消!\n");
        }
    } else if (e.getSource() == saveButton) {
        int returnVal = fc.showSaveDialog(FileChooserDemo.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            log.append("儲存檔案: " + fc.getSelectedFile().getName() + "\n");
        } else {
            log.append("儲存檔案被使用者取消!\n");
        }
    }
}
  • showOpenDialog() / showSaveDialog():分別顯示開啟/儲存對話框,會阻塞直到使用者關閉。
  • APPROVE_OPTION:使用者按下「開啟」或「儲存」按鈕。
  • getSelectedFile():取得使用者選取的 File 物件。

圖示載入輔助方法

protected static ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = FileChooserDemo.class.getResource(path);
    return (imgURL != null) ? new ImageIcon(imgURL) : null;
}

使用 Class.getResource() 可正確載入打包在 JAR 內的圖片資源。

執行結果

啟動後出現視窗,點擊「開啟檔案」或「儲存檔案」會彈出對話框,檔案清單僅顯示資料夾與 .java 檔案。操作完成後,中央文字區會記錄檔名或「取消」訊息。

延伸應用

  • 多重過濾器:addChoosableFileFilter() 可重複呼叫,讓使用者在下拉選單切換「Java 檔」「所有檔」等。
  • 檔案預覽:實作 JFileChooser.setAccessory() 加入縮圖或內容預覽元件。
  • 檔案名稱驗證:覆寫 approveSelection() 在確定前檢查副檔名、覆寫確認等。

總結

JFileChooser 配合 FileFilter 提供靈活的檔案選擇體驗。掌握 accept()、getDescription() 兩個核心方法,即可依業務需求客製化檔案清單,提升使用者操作效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved