JFileChooserでオープンダイアログを使う
GUIからファイルアクセスを利用するとき、何といっても必要となってくるのが「ファイルダイアログ」でしょう。一般のアプリケーションでは、ファイルを開いたり保存するときにはそのためのファイルダイアログが現れます。ここでファイルを選んだり、ファイル名を入力したりしてファイルを操作するのです。
このファイルダイアログは、Swingでは「JFileChoser」として用意されています。これは、2つのボタンクリック時の処理を行っているactionPerformedで利用されています。まずは、「Load」ボタンを押したときの処理からです。
if (ev.getSource() == button1){
こんな条件文があると思います。getSourceは、イベントが発生したコンポーネントを返すメソッドです。つまりこれで、アクションイベントが発生したのはbutton1かどうかをチェックしていたのです。
button1がクリックされていた場合には、JFileChooserを使ってオープンダイアログ(ファイルを開くときのダイアログ)を表示させます。まず、インスタンスを作成します。
JFileChooser chooser = new JFileChooser();
これは、単純にnewするだけでOKです。他に、いろいろと引数を指定したやり方もありますが、ここでは1番シンプルに引数なしで使うことにしましょう。インスタンスが準備できたら、オープンダイアログを呼び出します。
int res = chooser.showOpenDialog(this);
この「showOpenDialog」を呼び出すだけで、自働的にオープンダイアログが画面に現れます。ダイアログが現れている間、プログラムの処理はこのshowOpenDialog部分で停止したままになっています。そして、ここでファイルを選んでOKすると、ダイアログが消え、実行結果を示す値が変数resに収められて再び処理が続けられるようになります。
なお、引数に指定されるのは、このダイアログが属するコンテナです。ここではthisを指定していますが、こうすることで、このJFrameウインドウに属する形でダイアログが表示されます。よくわからなければ「引数はthisを指定する」とだけ覚えておけばいいでしょう。
このshowOpenDialogメソッドは、「どのようにダイアログを閉じたか」を示す値が返されるようになっています。これは、JFileChooserにクラスフィールドとして用意されています。ファイルを選択した場合には、APPROVE_OPTIONというクラスフィールドの値が返されるようになっています。
if (res == JFileChooser.APPROVE_OPTION){
そこで、このように返値がJFileChooser.APPROVE_OPTIONと等しい場合には、ファイルが選択されたとして処理を行えばいいことになります。ここでは、JFileChooserから選択したファイルの絶対パスを取り出して、これをloadFromFileに引数として渡して呼び出しています。
String fname = chooser.getSelectedFile().getAbsolutePath(); area.setText(loadFromFile(fname));
選択したファイルは、getSelectedFileというメソッドで得られます。ただし、これで得られるのは「java.io.File」というクラスのインスタンスなのです。このFileクラスは、ファイルを扱うためのもので、ファイル関係全般で用いられます。今回はFileについては、「getAbsolutePathというメソッドを呼び出すと、そのファイルの絶対パスをStringで得られる」ということだけ理解しておけば十分でしょう(実をいえば、Fileインスタンスからそのままファイルを利用することもできるのですが、今回はそれらについての説明は割愛します)。
保存ダイアログの場合は?
ファイルの保存も同様です。こちらは、JFileChooserインスタンスを作成した後、「showSaveDialog」でダイアログを呼び出します。
JFileChooser chooser = new JFileChooser(); int res = chooser.showSaveDialog(this);
そして、返された値がJFileChooser.APPROVE_OPTIONと等しいかどうかをチェックし、trueの場合にはgetSelectedFileのgetAbsolutePathを呼び出して絶対パスを取り出し、saveToFileでファイルに保存を行います。
if (res == JFileChooser.APPROVE_OPTION){
String fname = chooser.getSelectedFile().getAbsolutePath();
saveToFile(fname,area.getText());
基本的には、showOpenDialogとshowSaveDialogの違いがあるだけで、他はほぼ同じ使い方であることが分かります。このままでは、まだ表示されるファイルの種類などもまったく無指定ですから、本格的に使うなら「.txt」ファイルだけ扱えるようにフィルタ設定するなどいろいろと機能を覚えておく必要があるでしょう。とりあえずここであげた基本的な使い方だけでも、十分ファイルダイアログの便利さを実感できるはずです。
まとめ
やや後半は駆け足になってしまいましたが、テキストファイルの利用、例外処理、GUIで利用するためのファイルダイアログといったものの基本について一通り説明しました。テキストファイルが利用できるようになるだけでも、ずいぶんと作成できるプログラムの幅は広がります。
テキストファイルは、各種のファイルアクセスの最も基本となるものですから、ここで「ファイルを読み書きする」ということの基本をしっかり身につけておくとよいでしょう。


