ファイルダイアログ


ファイルの選択を要求する

おそらく、ほとんどのアプリケーションではHDD内のファイルの読み書きをする必要があるでしょう
ビューワーなどでは、ファイルを読み込むのにユーザーに選択させねばなりませんし
テキストエディタなどでは、ファイルを保存する必要もあります

多くのプラットフォームでは、ファイル選択の基本機能はネイティブシステムがサポートしています
ここでは、プラットフォームがサポートしているファイル選択用のダイアログをJavaで作る方法を覚えましょう

まず、ファイル選択ダイアログの生成にはjava.awt.FileDialogクラスを使用します
このクラスはDialogクラスを拡張しています
コンストラクタは次のものが用意されています

public FileDialog( Frame parent )
public FileDialog( Frame parent, String title )
public FileDialog( Frame parent, String title, int mode )

parentには、Dialog()コンストラクタ同様に、オーナーとなるフレームを選択します
titleは、ファイルダイアログのフレーム部分に表示されるタイトル文字列です

modeには、FileDialogクラスで定義されている定数で
ダイアログが読み込み用か書き込み用かを指定します
この違いは、Java言語ではなくプラットフォームで異なるので
実行されるプラットフォームを想定する必要があるかもしれません

実際に出現するファイルダイアログは、プラットフォームでまったく異なります
Windowsの場合は、書き込みダイアログですでに存在するファイルを選択すると
上書きを促す注意ダイアログが出ますが、Win以外のプラットフォームでは出ない場合もあります
modeに指定する定数は次のものがあります

public static final int LOAD 読み込みダイアログ
public static final int SAVE 保存ダイアログ

この二つの決定的な違いはありません
その機能は、先程話した様にプラットフォームで異なります
import java.awt.*;
import java.awt.event.*;

class test extends WindowAdapter implements ActionListener {
	Frame frm = new Frame("Kitty on your lap");
	FileDialog fd;

	public static void main(String args[]) {
		test win = new test();
	}

	public test() {
		frm.setSize(400 , 200);
		frm.setLayout(new FlowLayout(FlowLayout.CENTER , 5 , 5));

		Button load = (Button)frm.add(new Button("LOAD"));
		load.addActionListener(this);
		Button save = (Button)frm.add(new Button("SAVE"));
		save.addActionListener(this);
		
		frm.setVisible(true);
		frm.addWindowListener(this);
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand() == "LOAD" ) 
			fd = new FileDialog(frm , "読み込みにゃ" , FileDialog.LOAD);
		else fd = new FileDialog(frm , "書き込みにゃ" , FileDialog.SAVE);
		fd.setVisible(true);
	}

	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
}
フォームのボタンを押すと、それぞれのダイアログが出現します

ここで選択されたファイル名を得るには
FileDialogクラスのメソッドを使用します

選択されたファイル名を得るにはgetFile()メソッドを使用します
しかし、アプリケーションでファイル操作する場合、通常は絶対パスである必要があるので
ディレクトリ名も取得する必要があります
ディレクトリ名はgetDirectory()メソッドで得ることができます

public String getFile()
public String getDirectory()

getFile()はファイル名を、getDirectory()はディレクトリ名を返します
ディレクトリ名は、ドライブ、ルート、サブディレクトリ全てを含みます

また、一つのオブジェクトで読み書きのダイアログを行いたい場合は
setMode()メソッドで変更することができます
現在のモードはgetMode()メソッドで得ることができます

public void setMode( int mode )
public int getMode()

modeには、FileDialogクラスのダイアログモードを表すいずれかの定数を指定します
getMode()は、現在のダイアログのモードを整数値で返します

次のプログラムはLabelオブジェクトに、選択されたファイル名を表示します
キャンセルボタンを押されたときにnull値が渡される事を知ってください
import java.awt.*;
import java.awt.event.*;

class test extends WindowAdapter implements ActionListener {
	Frame frm = new Frame("Kitty on your lap");
	Label lb;
	public static void main(String args[]) {
		test win = new test();
	}
	public test() {
		frm.setSize(400 , 200);
		frm.setLayout(new GridLayout(2,1));

		Button load = (Button)frm.add(new Button("LOAD"));
		load.addActionListener(this);

		lb = (Label)frm.add(new Label());
		lb.setSize(50 , 400);

		frm.setVisible(true);
		frm.addWindowListener(this);
	}
	public void actionPerformed(ActionEvent e) {
		FileDialog fd = new FileDialog(frm , "読み込みにゃ" , FileDialog.LOAD);
		fd.setVisible(true);

		lb.setText(fd.getDirectory() + fd.getFile());
	}
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}
}



前のページへ戻る次のページへ