Swing/FileFilter のバックアップの現在との差分(No.17)
TITLE:JFileChooserにファイルフィルタを追加
Posted by terai at 2003-10-22
JFileChooserにファイルフィルタを追加
JFileChooserにファイルフィルタを追加します。- category: swing folder: FileFilter title: JFileChooserにファイルフィルタを追加 tags: [JFileChooser, FileFilter] author: aterai pubdate: 2003-11-17 description: JFileChooserにファイルフィルタを追加します。 image:
概要
JFileChooser
にファイルフィルタを追加します。
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#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");
@Override public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
return file.getName().toLowerCase(Locale.ENGLISH).endsWith(".jpg");
}
public String getDescription() {
#spanadd
#spanend
@Override public String getDescription() {
return "JPEGファイル(*.jpg)";
}
});
解説
上記のサンプルでは、フィルタを匿名インナークラスで書いていますが、複数のフィルタを追加する場合は、それぞれクラスを作ったほうがすっきり書けるかもしれません。解説
上記のサンプルでは、JFileChooser#addChoosableFileFilter(FileFilter)
メソッドを使用して拡張子がたとえば.jpg
のファイルのみを表示するFileFilter
を追加設定しています。
addChoosableFileFilter(FileFilter)メソッドを使うと、そのフィルタが現在選択されているフィルタになります。例えば「すべてのファイル」をデフォルト(選択された状態)に戻したい場合は、以下のようにします。
- -
-
addChoosableFileFilter(FileFilter)
メソッドを使うとそのフィルタが現在選択されているフィルタになる-
例えば「すべてのファイル」をデフォルト(選択された状態)に戻したい場合は、-JFileChooser#getAcceptAllFileFilter()
を再設定する必要がある
-
-
JDK 7
からJFileChooser#addChoosableFileFilter(...)
内でJFileChooser#setFileFilter(...)
を呼ばなくなった
- -
-
java.awt.FileDialog
は以下のようにjava.io.FilenameFilter
を使用する- FileDialog#setFilenameFilter(FilenameFilter) (Java Platform SE 8)
-
JFileChooser
にjava.io.FilenameFilter
は設定不可
#spandel
fileChooser.addChoosableFileFilter(myFilter);
#spanend
#spandel
fileChooser.setFileFilter(fileChooser.getAcceptAllFileFilter());
#spanend
#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 クラスが追加されており、拡張子で選択できるファイルフィルタを簡単に作成することが出来ます(参考:JavaSE6の便利クラス - きしだのはてな)。
-
JDK 6
では、新しくjavax.swing.filechooser.FileNameExtensionFilterクラスが追加された- JavaSE6の便利クラス - きしだのはてな
- 説明の後に可変長引数で拡張子を複数指定可能
- 拡張子に
.
ドットは不要で、大文字小文字も区別しない
#spandel
//FileNameExtensionFilter(String description, String... extensions)
#spanend
#spanadd
// FileNameExtensionFilter(String description, String... extensions)
#spanend
FileFilter filter = new FileNameExtensionFilter("JPEGファイル(*.jpg)", "jpg", "jpeg");
fileChooser.addChoosableFileFilter(filter);
上記のように説明の後に、可変長引数で拡張子を複数指定することが可能です。ドットは必要なく、大文字小文字も区別されないようです。
参考リンク
- JFileChooser#addChoosableFileFilter(...) (Java Platform SE 8)
- Bug ID: 6400960 Swing File*Filters should extend java.io.File*Filters
- JDK-4776197 JFileChooser has an easy-to-fix but serious performance bug - Java Bug System
コメント
- "jpg" → ".jpg" -- MT?
- 直しておきました。どもです。 -- terai
- addChoosableFileFilterを何度も呼ぶと最後に追加されたものがデフォルトになるが、例えば2番目に追加したfilterを最後に再び追加すると2番目がデフォルトになる。 -- Y?
- addChoosableFileFilter(FileFilter)は、そのFileFilterがすでに含まれている場合は、setFileFilter(FileFilter)だけ実行するみたいですね。 -- terai