ファイル選択にフィルタを付ける

.txt だけという選択ができるように

表示されるファイルのタイプが .txt だけだと選択しやすいので、これを実装します。

filechooser

新しいclassを作ります

ファイル名 MyFileFilter.java

public class MyFileFilter extends javax.swing.filechooser.FileFilter {
	String ext , msg;
	public MyFileFilter(String ex , String ms) {
		ext = ex;
		msg = ms;
	}
	public boolean accept(java.io.File f) {
            /* ディレクトリなら表示 */
           if (f.isDirectory()){
               return true;
            }
            /* 末尾がtxtだったら表示 */
           return f.getName().endsWith(ext);
        }
	public String getDescription() { return msg; }
}

コンパイルだけします。実行できません。

SanTakF.java に書き加えます

ファイル名 SanTakuF.java

前回の構成

public SanTakuF(){
	setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加
	JFileChooser chooser = new JFileChooser("./");
	int retVal = chooser.showOpenDialog(this);

今回の構成

public SanTakuF(){
	setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加
	JFileChooser chooser = new JFileChooser("./");
	MyFileFilter filter = new MyFileFilter(".txt" , "テキストファイル(*.txt)");
	chooser.addChoosableFileFilter(filter);
	int retVal = chooser.showOpenDialog(this);

これで、最初から、.txtの拡張子のファイルだけを表示します。

filechooser

ファイルタイプの右の▼をクリックすることで、「全てのファイル」に戻すことも可能です。

filechooser

いろいろ選べるようにする

SanTakuF.java では FileFilter をひとつだけ作って chooser に登録しています。

ファイル名 SanTakuF.java の一部

public SanTakuF(){
	setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加
	JFileChooser chooser = new JFileChooser("./");
	MyFileFilter filter = new MyFileFilter(".txt" , "テキストファイル(*.txt)");
	chooser.addChoosableFileFilter(filter);
	int retVal = chooser.showOpenDialog(this);

この部分を次のように変えた SanTakuM.java を作ってみましょう。

SanTakuM.java では FileFilter を3つ作って chooser に登録します。

ファイル名 SanTakuM.java の一部

public SanTakuM(){
	setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加
	JFileChooser chooser = new JFileChooser("./");
	MyFileFilter[] filter = {
		new MyFileFilter(".java" , "Java ファイル(*.java)") ,
		new MyFileFilter(".class" , "class ファイル(*.class)") ,
		new MyFileFilter(".txt" , "テキストファイル(*.txt)")
	};
	for(int i = 0 ; i < filter.length ; i++){
		chooser.addChoosableFileFilter(filter[i]);
	}
	int retVal = chooser.showOpenDialog(this);

これはやってみただけで、java,classファイルを選んでも三択問題はできません

もくじ

Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Oct. 2009 加筆