JavaA2Z

KAB-studio > プログラミング > JavaA2Z > モーダルダイアログとは

モーダルダイアログ

日本語 注意深く聞く対話窓
英語 modal dialog
ふりがな もーだるだいあろぐ
フリガナ モーダルダイアログ

解説

閉じるまで表示元ウィンドウを操作できないダイアログ
ダイアログの一種。ダイアログを表示すると、表示元のウィンドウが操作できなくなる種類のダイアログ
逆に、表示元ウィンドウを操作できるものを「モードレスダイアログ」と言う。
 
一般に「ダイアログ」と言えば「モーダルダイアログ」の事を指す場合が多い。
表示元のウィンドウを操作できなくするため、確認時に向いている。
 
モーダルダイアログは、AWTであればDialogクラスのmodal引数trueを渡すことでモーダルダイアログとすることができる。この際、同じくコンストラクタ引数でownerに渡したウィンドウが表示元のウィンドウとなり、このウィンドウが操作できなくなる。
show()メソッドで表示すると、hide()メソッド呼び出すまでshow()メソッドから返らない。また、表示元ウィンドウのイベントハンドラも呼び出されなくなり、アクティブにすることもできなくなる。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.awt.Frame;
import java.awt.Dialog;
import java.awt.Label;
import java.awt.Button;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.WindowListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;

public class Sample
{
    public static void main( String[] args )
    {
        // ウィンドウを作ります。
        NormalWindow normalWindow = new NormalWindow();
        // コンストラクタでウィンドウが作られます。
    }
}

/**
*   普通のウィンドウクラス。
*/
class NormalWindow extends Frame implements WindowListener
{
    /**
    *   コンストラクタ。
    */
    public NormalWindow()
    {
        // ウィンドウを作ります。
        super"テストウィンドウ" );
        addWindowListener( this );
        setSize( 400 , 300 );
        setVisible( true );
    }

    /**
    *   ウィンドウが閉じようとするときに呼ばれるメソッド。
    */
    public void windowClosing( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowClosing()" );

        // ウィンドウを閉じていいか、ダイアログで確認します。
        // ダイアログそのものはコンストラクタで作られます。
        CloseDialog dialog = new CloseDialog( this );
        if( dialog.isOk )
        {
            // 「OK」ボタンが押されたのでウィンドウの終了処理を行います。
            dispose();
        }
    }

    /**
    *   ウィンドウが閉じるときに呼ばれるメソッド。
    */
    public void windowClosed( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowClosed()" );
        System.exit( 0 );
    }

    /**
    *   以下、その他イベントハンドラ。
    *   これらのメソッドはWindowListenerインターフェイスの
    *   メソッドなので、全てオーバーライドする必要があるためです。
    */
    public void windowActivated( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowActivated()" );
    }

    public void windowDeactivated( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowDeactivated()" );
    }

    public void windowDeiconified( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowDeiconified()" );
    }

    public void windowIconified( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowIconified()" );
    }

    public void windowOpened( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowOpened()" );
    }
}

/**
*   終了確認ダイアログクラス。
*/
class CloseDialog extends Dialog implements ActionListener
{
    /** OKならtrue、キャンセルならfalseのフラグ。 */
    public boolean isOk = false;
    
    /**
    *   コンストラクタ。
    */
    public CloseDialog( Frame frame )
    {
        // 第3引数にtrueをセットすることで、モーダルダイアログにします。
        super( frame, "終了確認", true );
        setSize( 200 , 100 );

        // 縦3段のレイアウトにします。
        setLayout( new GridLayout( 3, 0 ) );

        // ダイアログに表示する文字列を貼り付けます。
        Label lable = new Label( "終了します。よろしいですか?" );
        add( lable );

        // OKボタンを貼り付けます。
        Button buttonOk = new Button( "OK" );
        buttonOk.addActionListener( this );
        add( buttonOk );

        // キャンセルボタンを貼り付けます。
        Button buttonCancel = new Button( "キャンセル" );
        buttonCancel.addActionListener( this );
        add( buttonCancel );

        // ダイアログを表示します。
        show();
    }

    /**
    *   ボタンが押されたときに呼び出されるメソッドです。
    */
    public void actionPerformed( ActionEvent event )
    {
        // OKボタンが押されていたらisOkにtrueをセットします。
        if( event.getActionCommand().equals( "OK" ) )
        {
            isOk = true;
        }
        else
        {
            isOk = false;
        }

        // ダイアログを閉じます。
        hide();
    }
}
// Sample.java
import java.awt.Frame;
import java.awt.Dialog;
import java.awt.Label;
import java.awt.Button;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.WindowListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;

public class Sample
{
    public static void main( String[] args )
    {
        // ウィンドウを作ります。
        NormalWindow normalWindow = new NormalWindow();
        // コンストラクタでウィンドウが作られます。
    }
}

/**
*   普通のウィンドウクラス。
*/
class NormalWindow extends Frame implements WindowListener
{
    /**
    *   コンストラクタ。
    */
    public NormalWindow()
    {
        // ウィンドウを作ります。
        super( "テストウィンドウ" );
        addWindowListener( this );
        setSize( 400 , 300 );
        setVisible( true );
    }

    /**
    *   ウィンドウが閉じようとするときに呼ばれるメソッド。
    */
    public void windowClosing( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowClosing()" );

        // ウィンドウを閉じていいか、ダイアログで確認します。
        // ダイアログそのものはコンストラクタで作られます。
        CloseDialog dialog = new CloseDialog( this );
        if( dialog.isOk )
        {
            // 「OK」ボタンが押されたのでウィンドウの終了処理を行います。
            dispose();
        }
    }

    /**
    *   ウィンドウが閉じるときに呼ばれるメソッド。
    */
    public void windowClosed( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowClosed()" );
        System.exit( 0 );
    }

    /**
    *   以下、その他イベントハンドラ。
    *   これらのメソッドはWindowListenerインターフェイスの
    *   メソッドなので、全てオーバーライドする必要があるためです。
    */
    public void windowActivated( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowActivated()" );
    }

    public void windowDeactivated( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowDeactivated()" );
    }

    public void windowDeiconified( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowDeiconified()" );
    }

    public void windowIconified( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowIconified()" );
    }

    public void windowOpened( WindowEvent windowEvent )
    {
        System.out.println( "NormalWindow#windowOpened()" );
    }
}

/**
*   終了確認ダイアログクラス。
*/
class CloseDialog extends Dialog implements ActionListener
{
    /** OKならtrue、キャンセルならfalseのフラグ。 */
    public boolean isOk = false;
    
    /**
    *   コンストラクタ。
    */
    public CloseDialog( Frame frame )
    {
        // 第3引数にtrueをセットすることで、モーダルダイアログにします。
        super( frame, "終了確認", true );
        setSize( 200 , 100 );

        // 縦3段のレイアウトにします。
        setLayout( new GridLayout( 3, 0 ) );

        // ダイアログに表示する文字列を貼り付けます。
        Label lable = new Label( "終了します。よろしいですか?" );
        add( lable );

        // OKボタンを貼り付けます。
        Button buttonOk = new Button( "OK" );
        buttonOk.addActionListener( this );
        add( buttonOk );

        // キャンセルボタンを貼り付けます。
        Button buttonCancel = new Button( "キャンセル" );
        buttonCancel.addActionListener( this );
        add( buttonCancel );

        // ダイアログを表示します。
        show();
    }

    /**
    *   ボタンが押されたときに呼び出されるメソッドです。
    */
    public void actionPerformed( ActionEvent event )
    {
        // OKボタンが押されていたらisOkにtrueをセットします。
        if( event.getActionCommand().equals( "OK" ) )
        {
            isOk = true;
        }
        else
        {
            isOk = false;
        }

        // ダイアログを閉じます。
        hide();
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/06/25
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。