フィルタを追加する(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つのコンストラクタが用意されています。ではコンストラクタを確認してみます。

指定された説明とファイル名拡張子を持つ 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);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

JFileChooserTest13.java

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());
    }
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

JFileChooserで表示するファイルをフィルタする

ボタンをクリックするとフィルタが適用されたダイアログが表示されます。

JFileChooserで表示するファイルをフィルタする

今回は2つのフィルタを作成して追加しました。デフォルトで表示されるのは最後に追加されたフィルタとなります。

またファイルタイプのコンボボックスではフィルタが追加された順に表示されます。

JFileChooserで表示するファイルをフィルタする

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。