java.awt.Dialog ダイアログの作成


前回はjava.awt.Dialogの概要についてみました。今回は実際にダイアログを作成して表示するところまでみていきます。

コンストラクタ

コンストラクタには次のようなものがあります。Java Platform SE 6ドキュメント を参考にしました。

コンストラクタ 説明
Dialog(Dialog owner) 指定された所有者 Dialog空のタイトルを持ち、最初は表示されない、モードなし Dialog を構築します。
Dialog(Dialog owner, String title) 指定された所有者 Dialogタイトルを持ち、最初は表示されない、モードなし Dialog を構築します。
Dialog(Dialog owner, String title, boolean modal) 指定された所有者 Dialog、タイトル、およびモーダリティーを持ち、最初は表示されない Dialog を構築します。
Dialog(Dialog owner, String title, boolean modal, GraphicsConfiguration gc) 指定された所有者 Dialog、タイトル、モーダリティー、および GraphicsConfiguration を持ち、最初は表示されない Dialog を構築します。
Dialog(Frame owner) 指定された所有者 Frame空のタイトルを持ち、最初は表示されない、モードなし Dialog を構築します。
Dialog(Frame owner, boolean modal) 指定された所有者 Frame とモーダリティー、および空のタイトルを持ち、最初は表示されない Dialog を構築します。
Dialog(Frame owner, String title) 指定された所有者 Frameタイトルを持ち、最初は表示されない、モードなし Dialog を構築します。
Dialog(Frame owner, String title, boolean modal) 指定された所有者 Frame、タイトル、およびモーダリティーを持ち、最初は表示されない Dialog を構築します。
Dialog(Frame owner, String title, boolean modal, GraphicsConfiguration gc) 指定された所有者 Frame、タイトル、モーダリティー、および GraphicsConfiguration を持ち、最初は表示されない Dialog を構築します。
Dialog(Window owner) 指定された所有者 Window空のタイトルを持ち、最初は表示されない、モードなし Dialog を構築します。
Dialog(Window owner, Dialog.ModalityType modalityType) 指定された所有者 Window とモーダリティー、および空のタイトルを持ち、最初は表示されない Dialog を構築します。
Dialog(Window owner, String title) 指定された所有者 Window とタイトルを持ち、最初は表示されない、モードなし Dialog を構築します。
Dialog(Window owner, String title, Dialog.ModalityType modalityType) 指定された所有者 Window、タイトル、およびモーダリティーを持ち、最初は表示されない Dialog を構築します。
Dialog(Window owner, String title, Dialog.ModalityType modalityType, GraphicsConfiguration gc) 指定された所有者 Window、タイトル、モーダリティー、および GraphicsConfiguration を持ち、最初は表示されない Dialog を構築します。

コンストラクタはまず所有者のクラスの違いにより大きく3つに分類されます。所有者となることができるのは、DialogとFrameそしてWindowクラスのインスタンスです。所有者をnull指定することで所有者なしにする ことができるようですが試しにnull引数でインスタンス生成してみるとエラーになりました。調べてみるとアプレットではnull引数でも大丈夫なようです。アプレットについては後々勉強して記事にしたいと思います。

さらに各所有者ごとに、タイトルの指定の有無、モーダルの有無、GraphicsConfigurationの指定の有無の組み合わせがあります。

モーダルダイアログとは、そのダイアログを閉じるまで表示元のウィンドウなどを操作できなくするダイアログです。例えばダイアログ生成時にコンストラクタで所有者を指定しますが、モーダル設定にすると所有者のウィンドウはダイアログを閉じるまで操作できません。
またダイアログ生成時に所有者としてモーダルダイアログを指定しても、そのダイアログは操作できます。


①のフレームを所有者として②のモーダルダイアログを開きます。モーダルなので②が閉じるまで①は操作できません。②のダイアログを所有者として③のダイアログを開きます。所有者がモーダルであっても③のダイアログは操作できます。

GraphicsConfigurationはプリンタまたはモニターなどのグラフィックスデスティネーションの特性を記述するクラスのようですが、少し内容が難しそうなのでまた機会があれば記事にしたいと思います。

ダイアログの作成と表示

コンストラクタの種類が多いので代表として所有者がFrameの場合についてみていきます。

(1)Dialog(Frame owner)

import java.awt.*;
import java.awt.event.*;

class Sample extends WindowAdapter {
    public static void main(String args[]) {
        new Sample().start();
    }
    private void start() {
        Dialog dialog = new Dialog(new Frame());
        dialog.setSize(300 , 150);
        dialog.setVisible(true);
        dialog.addWindowListener(this);
    }
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}
  • 1行目でDialogクラスを使う為に「java.awt」パッケージを読み込んでいます。
  • 9行目でDialogクラスのインスタンスを生成し、ダイアログを作成しています。
  • 10行目でダイアログのサイズを指定しています。setSizeメソッドはスーパークラスであるWindowクラスにあるメソッドで、コンポーネントのサイズを変更します。ここでサイズを指定しておかないとタイトルバーしかないダイアログができました。
  • 11行目でダイアログを表示しています。インスタンス生成後では非表示の状態になっており見えません。setVisibleメソッドはスーパークラスであるWindowクラスにあるメソッドで、コンポーネントを表示または非表示にします。同クラスには同じ機能のあるshowメソッドもありますが、こちらは現在非奨励でJDK version 1.5以降は、setVisibleメソッドに置き換えられています。
  • 12行目は14行目のwindowClosingメソッドを呼び出しています。ここではフレームを閉じるイベント処理を行っています。イベント処理については後々記事にする予定ですが、これを記述しないとフレームを閉じることができなくなるので書いておきました。
    ※このイベント処理を記述しない場合、コマンドライン実行時は「Ctrl + C」で、eclipse実行時はeclipse終了時に閉じます。

サンプルを実行するとタイトルがないダイアログができました。イベント処理も記述されているので右上の「閉じるボタン」をクリックすると閉じることができます。

次に所有者との関係について少しみていきます。

import java.awt.*;
import java.awt.event.*;

class Sample extends WindowAdapter {
    public static void main(String args[]) {
        new Sample().start();
    }
    private void start() {
        Frame frame = new Frame();
        frame.setSize(300 , 150);
        frame.setVisible(true);
        frame.addWindowListener(this);

        Dialog dialog = new Dialog(frame);
        dialog.setSize(200 , 100);
        dialog.setVisible(true);
    }
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

9~12行目でフレームを作成し表示します。14行目ではこのフレームを所有者としてダイアログを作成します。画面上にはフレームとダイアログが表示されました。

所有者であるフレームの最小化ボタンをクリックしてみます。フレームだけでなくダイアログも一緒に最小化されました。表示されているダイアログの所有者ウィンドウが非表示になった場合や最小化された場合、そのダイアログは自動的にユーザーに対して表示されなくなります。所有者ウィンドウがまた開かれると、ダイアログは再びユーザーに対して表示されます。

(2)Dialog(Frame owner, String title)

import java.awt.*;
import java.awt.event.*;

class Sample extends WindowAdapter {
    public static void main(String args[]) {
        new Sample().start();
    }
    private void start() {
        Dialog dialog = new Dialog(new Frame() , "Dialog");
        dialog.setSize(300 , 150);
        dialog.setVisible(true);
        dialog.addWindowListener(this);
    }
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}
  • 9行目でDialogクラスのインスタンスを生成し、ダイアログを作成しています。(1)との違いはタイトル行を指定するかどうかです。引数にStringクラスのインスタンスを渡すとタイトルが指定できます。9行目をマニュアル通り書くと
    Dialog dialog = new Dialog(new Frame(), new String("Dialog"));
    となるのですが、文字列はダブルクォーテーションで囲むだけでStringクラスのインスタンスを作ってくれるので今回は省略型をサンプルにしました。

サンプルを実行するとタイトルのあるダイアログができました。

(3)Dialog(Frame owner, boolean modal)

import java.awt.*;
import java.awt.event.*;

class Sample extends WindowAdapter {
    public static void main(String args[]) {
        new Sample().start();
    }
    private void start() {
        Frame frame = new Frame();
        frame.setSize(300 , 150);
        frame.addWindowListener(this);
        frame.setVisible(true);
        DialogSample dialog = new DialogSample(frame);
    }
    public void windowClosing(WindowEvent e) {
       System.exit(0);
    }
}//end class

class DialogSample extends Dialog {
    //コンストラクタ
    DialogSample(Frame parent) {
        super(parent , true);
        this.setSize(200 , 100);
        this.addWindowListener(new DialogWindowListener());
        this.setVisible(true);
    }
    //イベント処理
    class DialogWindowListener extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            dispose();
        }
    }
}//end class

モーダルダイアルを作成します。モーダルダイアログとは、そのダイアログを閉じるまで表示元のウィンドウなどを操作できなくするダイアログです。

  • 20~34行目はダイアログの見た目やイベント処理を記述したクラスです。Dialogクラスを継承しています。
  • 23行目でスーパクラスDialogのコンストラクタである
    Dialog(Frame owner, boolean modal)
    を実行しています。第2引数がtrueなのでモードがモーダルになります。
  • 25行目でダイアログに対するイベント処理を指定します。イベント処理については後々詳しく記事にする予定です。今回はダイアログの「閉じる」ボタンが押されたら31行目のdisposeメソッドが実行されます。disposeメソッドはリソースの開放で見た目上はダイアログが閉じます。
  • 13行目でモーダルダイアログを作成し表示しています。


実行してみると、ダイアログを閉じるまではフレームを閉じたり、移動したり、最小化できなくなっていることがわかります。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です