概要

JFileChooserにファイルフィルタを追加します。

サンプルコード

JFileChooser fileChooser = new JFileChooser();
fileChooser.addChoosableFileFilter(new FileFilter() {
  @Override public boolean accept(File file) {
    if (file.isDirectory()) {
      return true;
    }
    return file.getName().toLowerCase().endsWith(".jpg");
  }
  @Override public String getDescription() {
    return "JPEGファイル(*.jpg)";
  }
});
view all

解説

上記のサンプルでは、フィルタを匿名インナークラスで書いていますが、複数のフィルタを追加する場合は、それぞれクラスを作ったほうがすっきり書けるかもしれません。

addChoosableFileFilter(FileFilter)メソッドを使うと、そのフィルタが現在選択されているフィルタになります。例えば「すべてのファイル」をデフォルト(選択された状態)に戻したい場合は、以下のようにします。

fileChooser.addChoosableFileFilter(myFilter);
fileChooser.setFileFilter(fileChooser.getAcceptAllFileFilter());

JDK 6では、新しくjavax.swing.filechooser.FileNameExtensionFilterクラスが追加されており、拡張子で選択できるファイルフィルタを簡単に作成することが出来ます(参考: JavaSE6の便利クラス - きしだのはてな)。

//FileNameExtensionFilter(String description, String... extensions)
FileFilter filter = new FileNameExtensionFilter("JPEGファイル(*.jpg)", "jpg", "jpeg");
fileChooser.addChoosableFileFilter(filter);

上記のように説明の後に、可変長引数で拡張子を複数指定することが可能です。ドットは必要なく、大文字小文字も区別されないようです。

参考リンク

コメント

  • jpg.jpg -- MT
    • 直しておきました。どもです。 -- aterai
  • addChoosableFileFilterを何度も呼ぶと最後に追加されたものがデフォルトになるが、例えば2番目に追加したfilterを最後に再び追加すると2番目がデフォルトになる。 -- Y
    • addChoosableFileFilter(FileFilter)は、そのFileFilterがすでに含まれている場合は、setFileFilter(FileFilter)だけ実行するみたいですね。 -- aterai