ファイルダイアログ
ファイルの選択を要求する
おそらく、ほとんどのアプリケーションでは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);
}
}