TITLE:JFileChooserにファイルフィルタを追加

JFileChooserにファイルフィルタを追加

編集者:Terai Atsuhiro~

作成日:2003-10-22
更新日:2021-06-06 (日) 17:31:59
  • category: swing folder: FileFilter title: JFileChooserにファイルフィルタを追加 tags: [JFileChooser, FileFilter] author: aterai pubdate: 2003-11-17 description: JFileChooserにファイルフィルタを追加します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTMc7NJ5UI/AAAAAAAAAZM/p-hliI-ZnLs/s800/FileFilter.png

概要

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

概要

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

サンプルコード

#spanend
#spanadd
JFileChooser fileChooser = new JFileChooser();
#spanend
#spanadd
fileChooser.addChoosableFileFilter(new FileFilter() {
#spanend
  @Override public boolean accept(File file) {
    if (file.isDirectory()) {
      return true;
    }
    return file.getName().toLowerCase(Locale.ENGLISH).endsWith(".jpg");
  }

#spandel
#screenshot
#spanend
#spandel

#spanend
#spandel
**サンプルコード [#v2620577]
#spanend
#spandel
#code{{
#spanend
 JFileChooser fileChooser = new JFileChooser();
 fileChooser.addChoosableFileFilter(new FileFilter() {
   public boolean accept(File file) {
     if(file.isDirectory()) return true;
     return file.getName().toLowerCase().endsWith(".jpg");
   }
   public String getDescription() {
     return "JPEGファイル(*.jpg)";
   }
 });
  @Override public String getDescription() {
    return "JPEGファイル(*.jpg)";
  }
#spanadd
});
#spanend
View in GitHub: Java, Kotlin
  • &jar;
  • &zip;

解説

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

解説

上記のサンプルでは、JFileChooser#addChoosableFileFilter(FileFilter)メソッドを使用して拡張子がたとえば.jpgのファイルのみを表示するFileFilterを追加設定しています。 addChoosableFileFilter(FileFilter)メソッドを使うと、そのフィルタが現在選択されているフィルタになります。例えば「すべてのファイル」をデフォルト(選択された状態)に戻したい場合は、以下のようにします。
  • -
  • addChoosableFileFilter(FileFilter)メソッドを使うとそのフィルタが現在選択されているフィルタになる
    • 例えば「すべてのファイル」をデフォルト(選択された状態)に戻したい場合は、JFileChooser#getAcceptAllFileFilter()を再設定する必要がある -
  • JDK 7からJFileChooser#addChoosableFileFilter(...)内でJFileChooser#setFileFilter(...)を呼ばなくなった
  • -
 fileChooser.addChoosableFileFilter(......
 fileChooser.setFileFilter(fileChooser.getAcceptAllFileFilter()); 
#spanadd
FileDialog fd = new FileDialog(frame, "title");
#spanend
#spanadd
FilenameFilter filter = (dir, file) -> file.toLowerCase(Locale.ENGLISH).endsWith(".jpg");
#spanend
#spanadd
fd.setFilenameFilter(filter);
#spanend
JDK 6 では、新しく javax.swing.filechooser.FileNameExtensionFilter クラスが追加されており、拡張子で選択できるファイルフィルタを簡単に作成することが出来ます(参考:きしだのはてな)。
  • -
 //FileNameExtensionFilter(String description, String... extensions)
 FileFilter filter = new FileNameExtensionFilter("JPEGファイル(*.jpg)", "jpg", "jpeg");
 fileChooser.addChoosableFileFilter(filter);
#spanadd
// FileNameExtensionFilter(String description, String... extensions)
#spanend
#spanadd
FileFilter filter = new FileNameExtensionFilter("JPEGファイル(*.jpg)", "jpg", "jpeg");
#spanend
#spanadd
fileChooser.addChoosableFileFilter(filter);
#spanend
上記のように説明の後に、可変長引数で拡張子を複数指定することが可能です。ドットは必要なく、大文字小文字も区別されないようです。

参考リンク

コメント

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

コメント