ファイル参照ダイアログを表示するには、javax.swing.JFileChooser, javax.swing.filechooser.FileFilterを使用する。FileFilterにはJFileChooserで表示するファイルを絞り込むための条件判定処理を実装する。
少々長いサンプルだが、重要なのはFileFilterの実装部分である。今回は内部クラスとして用意したが、他でも利用するのであれば、もちろん独立したクラスとして用意するべきだ。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileFilter;
public class Starter extends JFrame implements ActionListener {
class SxiFileFilter extends FileFilter {
private String description;
private ArrayList suffixes = new ArrayList();
public SxiFileFilter() {
addType(“sxi”);
setDescription(“OpenOffice Impress files”);
}
public void addType(String s) {
suffixes.add(s);
}
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
} else if (f.isFile()) {
Iterator iterator = suffixes.iterator();
while (iterator.hasNext()) {
String suffix = (String) iterator.next();
if (f.getName().endsWith(suffix)) {
return true;
}
}
}
return false;
}
public void setDescription(String s) {
description = s;
}
public String getDescription() {
return description;
}
}
private JFileChooser chooser;
public Starter() {
super(“ファイル選択”);
chooser = new JFileChooser();
chooser.addChoosableFileFilter(new SxiFileFilter());
JButton b = new JButton(“参照…”);
b.addActionListener(this);
getContentPane().add(b);
}
public void actionPerformed(ActionEvent e) {
int option = chooser.showOpenDialog(this);
if (option == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
System.out.println(
(file.isFile() ? “ファイル” : “ディレクトリ”)
+ “名:”
+ file.getPath()
+ “が選択されました。”);
} else {
System.out.println(“ファイルは選択されませんでした。”);
}
}
public static void main(String[] args) {
Starter starter = new Starter();
starter.pack();
starter.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
starter.setVisible(true);
}
}