ファイル選択

実行中にファイルを選択できるように

エディタやワープロでやるように,ファイルの一覧を出してその中からファイルを選択するようにします。

JFileChooser

を使います。

SanTakuF.javaの作成

SanTaku.java に書き加えます

ファイル名 SanTakuF.java

前回の構成

public SanTaku(){
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	m   = new Mondaishuu("mondai.txt",10 );
	label1 = new JLabel("問題 "+(n+1),JLabel.LEFT); //nは0から問題番号は1から

今回の構成

public SanTakuF(){
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	JFileChooser chooser = new JFileChooser(".");
	int retVal = chooser.showOpenDialog(this);
	if (retVal != JFileChooser.APPROVE_OPTION) System.exit(0);

	File file = chooser.getSelectedFile();
	String fname = file.getPath();
	m   = new Mondaishuu(fname,10);
	label1 = new JLabel("問題 "+(n+1),JLabel.LEFT); //nは0から問題番号は1から

中にFileクラスを使っているので、次のパッケージをインポートする必要があります。

import java.io.*;

説明

JFileChooser はユーザーがファイルを選択するためのクラスです。newでインスタンスを作り、chooserという名前にしています。

JFileChooserの引数は一覧を出したいフォルダを表す文字列(またはファイルのインスタンス)です。省略するとデフォルトのフォルダ(Linuxではユーザーホーム、Windowsではマイドキュメント)になります。

引数に入れている"."(または"./")はカレントディレクトリを表します。今回の使い方ではユーザーホームのjavaというフォルダがカレントディレクトリです。

chooser.showOpenDialog(this) はchooserに選択のための小さなウィンドウ(これをダイアログといいます)を出させます。thisはこのダイアログがSanTakuFのインスタンスの付属ダイアログ(子)となることを表します。

retVal はchooser.showOpenDialog(this)メソッドの戻り値を受け取ります。ここでの戻り値はダイアログが「開く」でもどったのか「取消し」で戻ったのかということです。選択したファイルの名前ではありません。

if (retVal != JFileChooser.APPROVE_OPTION) はその戻り値がJFileChooserのフィールドに書かれているAPPROVE_OPTIONと同じか調べています。APPROVEは「承認」 なので、!= と組み合わせて「開く」のボタンで戻ったのではないという意味になります。「取消し」ボタンを押したかもしれないし「×」 ボタンでダイアログを閉じてしまったかもしれません。

System.exit(0); その場合には即プログラムを終了させます。

一方選択したファイルの名前を得るにはchooserにgetSelectedFile()メソッドで問い合わせます。それが、chooser.getSelectedFile(); です。

選択したファイルの情報は文字列ではなくFileというクラスのインスタンスとして帰ってきます。そこで、File file に代入しているわけです。

Mondaishuu には文字列でファイルを教えなければならないので、file の中から file.getPath() を使ってファイルの名前(正確にはパスも含めた名前)を文字列で抽出して fname に代入します。

そのfnameで Mondaishuu のインスタンスを作ります。

実行

いつものように実行します。

$ javac SanTakuF.java
$ java SanTakuF

最初にファイルの選択画面がでます。mondai.txtなどを選択します。

filechooser

選択すると問題が始まります。

三択問題2問目になったところ

もしも問題の形式になっていないファイルを選択すると、うまく動かないはずです。ほんとうはそのような場合にファイルの形式が間違っているというメッセージがでて、選択しなおすとか、停止するとかの対策が必用です。

課題

1.

上記SanTakuF.javaをつくり、実行してみなさい

ファイル名 SanTakuF.java


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