| GUI の構成ブロックであるコンポーネントを使用する |
AWT は、Dialogクラスによって、他のウィンドウに依存するウィンドウ、すなわちダイアログ をサポートする。 Dialog クラスは便利なFileDialog
サブクラスを備えており、これ はユーザがファイルを開いたり保存したりするときに役立つダイアログを提供するも のである。
ダイアログと通常のウィンドウ (Frame オブジェクトによって実装される) の違いの 1 つは、ダイアログは他のウィンドウ (Frame) に依存することである。 他のウィンドウが破棄されると、それに依存するダイアログも破棄されることになる 。 他のウィンドウがアイコンへと小型化されると、それに依存するダイアログもスクリーンから消える。ウィンドウが普通の状態に戻ると、それに依存するダイアログもスクリーンに復帰する。 このような動作は AWT が自動的に調整している。
アプレットが、それを実行しているウィンドウを見つけるための API は現在のところ存在していないため、アプレットは一般にダイアログを使用できない。ただし、独自のウィンドウ (Frame) を起動するアプレットが、そのウィンドウに依存するダイ アログをもつ場合は例外である。この理由から、以下に示すアプレットは、ダイアロ グを起動するウィンドウを起動するボタンで構成されている。
使用中のブラウザは <APPLET> タグを理解しない。ボタンが起動するウィンド ウ (Frame) のスナップショットを示す。
そのウィンドウのダイアログのスナップショットは次のようになる。
ダイアログはモード付き にすることができる。 モード付きダイアログは、ダイアログが消されるまで、ユーザがダイアログのアプリ ケーションの中で別のことを行わないように、ユーザの注意を引き付けるようになっている。 デフォルトでは、ダイアログはモード付きでない。つまり、ユーザはダイアログを起動したまま、そのアプリケーションの別のウィンドウで作業できる。
注: 1.0 リリースのバグにより、モード付きの特製の Dialog サブクラスを作成すること はできない。 これは 1.0.2 リリースで修正される。
上記のアプレットが起動するウィンドウのコードも参照できる。 このコードは、スタンドアローンのアプリケーションとしても、またはAppletButton クラスを利用してアプレッ トとして (上記のように) も実行することができる。 以下に、Dialog オブジェクトを実装するコード部分を示す。
class SimpleDialog extends Dialog {
TextField field;
DialogWindow parent;
Button setButton;
SimpleDialog(Frame dw, String title) {
super(dw, title, false);
parent = (DialogWindow)dw;
...//設定ボタンのようなコンポーネントを作成、追加する。
//このダイアログを望みのサイズに初期化する。
pack();
}
public boolean action(Event event, Object arg) {
if ( (event.target == setButton)
| (event.target instanceof TextField)) {
parent.setText(field.getText());
}
field.selectAll();
hide();
return true;
}
}
上記の SimpleDialog 構築子で使用されている pack() メソッドは、 Window クラスによって定義されるメソッドである。 (Dialog は Window サブクラスであることに留意する。)pack() メソッドは、すべてのコンテンツが (ウィンドウのレイアウトマネージャに応じて) 望みのサイズまたは最小サイズより大きいサイズになるように ウィンドウサイズを変更する。 一般に、pack() を使用する方が、ウィンドウに対してresize() メソッドを呼び出すよりも望ましい。これは、pack() は、ウィンドウのレイアウトマネージャにウィンドウサイズの管理をまかせ、レイアウトマネージャがプラットフォームの依存性やコンポーネントサイズに影響する他の因子をうまく調整してくれるからである。
以下に、ダイアログを起動するコードを示す。
if (dialog == null) {
dialog = new SimpleDialog(this, "A Simple Dialog");
}
dialog.show();
上記の最初のコード例で使用されているメソッドのほかに、Dialog クラスは以下のメソッドも用意している。
Dialog(Frame, boolean)boolean isModal()String getTitle(), String setTitle(String)boolean isResizable(), void setResizable(boolean)| GUI の構成ブロックであるコンポーネントを使用する |