忍者ブログ
[94] [93] [92] [91] [90] [89] [88] [87] [86] [85] [84]

DATE : 2017/06/29 (Thu)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/06/28 (Wed)

javax.swing.JFileChooser を使うと、ファイルを選択するダイアログを開くことができます。

また、JFileChooser に javax.swing.filechooser.FileFilter を登録すると、ダイアログに表示するファイルに制限を加えることができます。例えば、JPEG ファイルのみを選択できるようにするといった具合です。

FileFilter は抽象クラスなので、利用するにはサブクラスを作らなければなりません。

FileFilter には、 FileFilter#accept(java.io.File)FileFilter#getDescription() と、抽象メソッドが2つ定義されています。前者が引数に渡された File を表示するかどうか真偽値で返し、後者が FileFileter の説明(Windows のファイル選択ダイアログで言うと、「ファイルの種類」の欄に出てくる説明)を文字列で返します。

ここで、先程のように JPEG ファイルのみを表示する FileFilter を作成してみます。ただし、ここでは簡単のため、拡張子が「.jpg」のファイルのみを表示可能にします。

以下に、FileFilter#accept(java.io.File) のコードを示します。

(import 文などは省略)
public boolean accept(File file) {
    // ファイル名(全て小文字に変換)
    String name = file.getName().toLowerCase();

    // 拡張子「.jpg」のファイルなら表示
    return name.endsWith(".jpg");
}

しかし、このコードは間違いです。

実際にこの FileFilter を JFileChooser に設定すると、選択欄にほとんど何も表示されず、面食らうことになります。

実は、 FileFilter#accept(java.io.File) にはディレクトリも渡されることになっています。もともと java.io.File は、あくまでもファイルパスの表現でしかないため、中身がファイルを示すことがあれば、ディレクトリを示すこともあります。

つまり上のコードでは、ファイルもディレクトリも「.jpg」で終わっているものでなければ表示しないフィルタになっているのです。

そこで、渡された File がディレクトリの場合はダイアログに表示するように、上のコードを書き換えます。

(import 文などは省略)
public boolean accept(File file) {
    // ディレクトリであればダイアログに表示
    if (file.isDirectory()) {
        return true;
    }

    // ファイル名(全て小文字に変換)
    String name = file.getName().toLowerCase();

    // 拡張子「.jpg」のファイルなら表示
    return name.endsWith(".jpg");
}

参考文献

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
05 2017/06 07
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
05 2017/06 07
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)