フィルタを追加する(J2SE1.6以降)
前頁ではFileFilterクラスを継承したサブクラスを作成してフィルタを作成しました。J2SE1.6以降であればFileFilterクラスを実装したFileNameExtensionFilterクラスが用意されています。ファイルの拡張子を使ったフィルタを作成する場合はこのクラスを利用することで簡単にフィルタを設定できます。
FileNameExtensionFilterクラス
FileNameExtensionFilterクラスの定義を確認します。クラス図は次のようになっています。
java.lang.Object
  javax.swing.filechooser.FileFilter
    javax.swing.filechooser.FileNameExtensionFilter
public final class FileNameExtensionFilter extends FileFilter
FileNameExtensionFilterクラスはFileFilterクラスのサブクラスとなっています。
FileNameExtensionFilterクラスのコンストラクタ
FileNameExtensionFilterクラスをを利用するにはコンストラクタを使ってFileNameExtensionFilterクラスのオブジェクトを作成します。どのようなコンストラクタが用意されているか確認してみます。
| コンストラクタ | 
|---|
| FileNameExtensionFilter(String description, String... extensions) 指定された説明とファイル名拡張子を持つ FileNameExtensionFilter を構築します。 | 
1つのコンストラクタが用意されています。ではコンストラクタを確認してみます。
public FileNameExtensionFilter(String description, String... extensions)
指定された説明とファイル名拡張子を持つ FileNameExtensionFilter を構築し
ます。返される FileNameExtensionFilter は、すべてのディレクトリと、
extensions に含まれるファイル名拡張子を持つすべてのファイルを受け入れま
す。
パラメータ:
  description - フィルタの説明テキスト (null の場合もある)
  extensions - 受け入れるファイル名拡張子 
例外: 
  IllegalArgumentException - 拡張子が null、すなわち空である場合、 null
    または空の文字列を含む
1番目の引数にフィルタの説明を表す値をString型の値で設定します。
2番目の引数に表示可とするファイルの拡張子を表す値をString型の値で設定します。この変数は可変長変数となっていますので許可したい数の引数をカンマ(,)で区切って設定して下さい。
実際の使い方は次のようになります。
JFileChooser filechooser = new JFileChooser();
FileFilter filter = new FileNameExtensionFilter("HTMLファイル", "html", "htm");
filechooser.addChoosableFileFilter(filter);
int selected = filechooser.showOpenDialog(this);
サンプルプログラム
では簡単なサンプルを作成して試してみます。
import javax.swing.*;
import java.io.File;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.filechooser.*;
public class JFileChooserTest13 extends JFrame implements ActionListener{
  JLabel label;
  public static void main(String[] args){
    JFileChooserTest13 frame = new JFileChooserTest13();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }
  JFileChooserTest13(){
    JButton button = new JButton("file select");
    button.addActionListener(this);
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(button);
    label = new JLabel();
    JPanel labelPanel = new JPanel();
    labelPanel.add(label);
    getContentPane().add(labelPanel, BorderLayout.CENTER);
    getContentPane().add(buttonPanel, BorderLayout.PAGE_END);
  }
  public void actionPerformed(ActionEvent e){
    JFileChooser filechooser = new JFileChooser("c:\\temp");
    FileFilter filter1 = 
      new FileNameExtensionFilter("HTMLファイル", "html", "htm");
    FileFilter filter2 = 
      new FileNameExtensionFilter("テキストファイル", "txt");
    filechooser.addChoosableFileFilter(filter1);
    filechooser.addChoosableFileFilter(filter2);
    int selected = filechooser.showOpenDialog(this);
    if (selected == JFileChooser.APPROVE_OPTION){
      File file = filechooser.getSelectedFile();
      label.setText(file.getName());
    }
  }
}
上記をコンパイルした後で実行すると次のように表示されます。
			 
			
ボタンをクリックするとフィルタが適用されたダイアログが表示されます。
			 
			
今回は2つのフィルタを作成して追加しました。デフォルトで表示されるのは最後に追加されたフィルタとなります。
またファイルタイプのコンボボックスではフィルタが追加された順に表示されます。
			 
			
( Written by Tatsuo Ikura )
 
				著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。
