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

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

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

filechooser

java version 1.6 以降に使える簡単な方法

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(".");
    FileNameExtensionFilter filter = new FileNameExtensionFilter(
        "テキストファイル(*.txt)", "txt");
    chooser.setFileFilter(filter);
    int retVal = chooser.showOpenDialog(this);

もうひとつimportを増やさなければなりません。最初の import が書いてある部分に1行加えます。

import javax.swing.filechooser.FileNameExtensionFilter;

「FileNameExtensionFilter というのは javax.swing.filechooser の中にあるからそこも参照してね」ということ

または、こう書いてもOKです。

import javax.swing.filechooser.*;

「javax.swing.filechooser の中のクラスも使うのでそこも参照してね」ということ

java version 1.5 までは次の方法で(もちろん1.6でも使える)

新しい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) {
		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);

使用方法(1.6,1.5共同じ)

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

filechooser

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

filechooser

いろいろ選べるようにする(1.5 までの方法の場合)

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 では 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ファイルを選んでも三択問題はできません

課題

1.

上記の .txt のフィルタをSanTakuF.javaに追加しなさい。

ファイル名 SanTakuF.java に書き加える


Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2003
Feb.2009
Oct.2011
Sep.2012