新トップページへ | Tip

AWTの基本的な使い方のメモ

LastUpdate : 07/01/19

 AWT(Abstract Window Toolkit)の使い方についての、基本的な使い方のメモです。
 内容はJDK1.2を基準にしています(しかし可変長引数を使っているところも有り1.5以上でないと動かないものがあります)。

 内容についてですが、私が昔初めてJavaをさわった時に読んでいた『独習Java』(翔泳社)を参考にしています。
この本を読み、内容を理解し、理解した内容を、私が作成したサンプルコードと共にここに書き出しています。

 Componentクラスがそれぞれのコントロールの親のクラスです。「 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Component.html 」。これを基本にして、作成していきます

☆ もくじ。
  1. 代行イベントモデルについて
  2. マウスイベント
  3. Label
  4. Button
  5. Canvas
  6. Checkbox
  7. CheckboxGroup(ラジオボタン)
  8. Choice(コンボボックス)
  9. テキストフィールド・テキストエリア(エディットボックス)
  10. リスト(リストボックス)
  11. スクロールバー
  12. レイアウトマネージャー(FlowLayout
  13. レイアウトマネージャー(BorderLayout
  14. レイアウトマネージャー(GridLayout
  15. パネル
  16. Frame
  17. メニューバー
  18. ダイアログ
  19. ファイルダイアログ


代行イベントモデルについて

 私の感覚では、目新しい単語が三つほどでてきました。それが以下のものです。
 ・ソース : 入力などが発生した場合、リスナにイベントを送信するのが仕事。
 ・リスナ : ソースから送信されたイベントを受信するのが仕事。
 ・アダプタクラス : リスナのインターフェイスのメソッドを、仮のメソッドですべて実装してある便利クラス。

 ソースからイベントが発信されてそれを受信したリスナが、そのイベントの種類によって、あらかじめ決められているメソッドを呼び出す、という処理を行なうみたいです。

 おのおののイベントクラスの上位には、AWTEventクラスがあります。AWTEventの親はEventObject、EventObjectの親はObjectクラスとなっています。

マウスイベント

 マウスのイベントのリスナは MouseListenerインターフェイス , MouseMotionListenerインターフェイス を使います。これらのインターフェイスのメソッドを実装することで、それぞれのイベントに対しての処理を書くことができます。

 JavaAppletを実行してみる。

☆ マウスの動きをキャッチする。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*
        <applet code="TestMain" width=640 height=480>
        &lt/applet>

*/

public class TestMain extends Applet implements MouseListener,MouseMotionListener
{
        String m_Msg;   //表示するメッセージ
        int m_x,m_y;    //マウスのイベントが発生したときの座標。
        
        //---------------------------------------------
        //アプレットのメソッド
        public void init()
        {
                addMouseListener(this);
                addMouseMotionListener(this);
        }
        public void paint(Graphics g)
        {
                StringBuffer Buf = new StringBuffer();
                Buf.append(getMsg());
                Buf.append("座標: "+GetCoordinatesX()+","+GetCoordinatesY());
                g.drawString(Buf.toString(),50,50);
        }
        
        //---------------------------------------------
        //メソッドの内部で使われる便利なメソッド
        void showMessage(String Mes,MouseEvent Me)
        {
                setMsg(Mes);
                setMouseCoordinates( Me.getPoint() );
                repaint();
        }
        
        void setMsg(String Str)
        {
                m_Msg = new String(Str);
        }
        void setMouseCoordinates(Point P)
        {
                m_x = P.x;
                m_y = P.y;
        }
        
        String getMsg(){        return m_Msg;   }
        int GetCoordinatesX(){  return m_x;     }
        int GetCoordinatesY(){  return m_y;     }
        
        
        //---------------------------------------------
        //MouseListenerインターフェイスの実装
        public void mouseClicked(MouseEvent Me)
        {
                showMessage("マウスのボタンがクリックされました。",Me);
        }
        public void mouseEntered(MouseEvent Me)
        {
                showMessage("マウスがウインドウの中に入りました。",Me);;
        }
        public void mouseExited(MouseEvent Me)
        {
                showMessage("マウスがウインドウの中から出て行きました。",Me);
        }
        public void mousePressed(MouseEvent Me)
        {
                showMessage("マウスのボタンが押されました。",Me);
        }
        public void mouseReleased(MouseEvent Me)
        {
                showMessage("マウスのボタンが放されました",Me);
        }
        
        //--------------------------------------------- 
        //MouseMotionListenerのインターフェイスの実装。
        public void mouseDragged(MouseEvent Me)
        {
                showMessage("マウスのボタンがドラッグされています。",Me);
        }
        public void mouseMoved(MouseEvent Me)
        {
                showMessage("マウスが動いています。",Me);
        }
        
        //---------------------------------------------
        //このクラスのコンストラクタ
        public TestMain()
        {
                m_Msg = new String("まだ何もされてません。");
                repaint();
        }
}

Label

 Labelは文字列を表示するコントロールです。エディットボックスとの違いは、ユーザーからの入力を前提としていないことでしょうか?
 また、表示位置は、指定することができません(勝手にてきとうな場所に配置される)。どうしても、位置を指定したい場合は、Panelなどのコントロールの上に作成しなければなりません。

 実行してみるとわかるのですが、 \n の改行記号をあっさりと無視してくれます。Graphics::drawStringメソッドも改行記号などを無視しますので、同じ仕様なのでしょうか?

 JavaAppletを実行してみる。

☆ Labelコントロールを作成する。

import java.applet.*;
import java.awt.*;


public class AwtTest2 extends Applet
{
        public void init()
        {
                Label Lbl = new Label("ラベルです。\nこれが文字列です。",Label.CENTER);
                add(Lbl);
        }
}

Button

 ボタンコントロールの使い方です。

 JavaAppletを実行してみる。

☆ ボタンコントロールの使い方。

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


public class AwtTest3 extends Applet implements ActionListener
{
        Label m_Lbl;
        
        public void init()
        {
                //メッセージ表示用のラベルを作成。
                m_Lbl = new Label("ボタンを押してください。");
                add(m_Lbl);
                //ボタンを作成。
                Button Btn1 = new Button("test1");
                Btn1.addActionListener(this);
                add(Btn1);
                Button Btn2 = new Button("test2");
                add(Btn2);
                Btn2.addActionListener(this);
        }
        
        //ActionListenerインターフェイスのメソッドの実装。
        public void actionPerformed(ActionEvent Ae)
        {
                if( "test1".equals( Ae.getActionCommand() ) )
                        m_Lbl.setText("test1ボタンが押されました。");
                else if( "test2".equals( Ae.getActionCommand() ) )
                        m_Lbl.setText("test2ボタンが押されました。");
        }
}

Canvas

 CanvasはGraphicsインターフェイスで描画できる、描画領域のことのようです。Graphicsインターフェイスを通して、いろんなイメージが描画できます。
 独自クラスにCanvasクラスを継承し、paintメソッドをオーバーライドして使うようです。
 サンプルでは、キャンバスに、円を描いてみました。

 Canvasクラスの内容は「 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/awt/Canvas.html 」を参照。

 JavaAppletを実行してみる。

☆ Canvasクラスの使い方。

import java.applet.*;
import java.awt.*;


public class AwtTest4 extends Applet 
{
        AwtTest4_Canvas  m_ImgArea;
        public void init()
        {
                m_ImgArea = new AwtTest4_Canvas();
                //キャンバスのサイズを設定する。
                m_ImgArea.setSize(640,480);
                //コンテナにキャンバスの追加。
                add(m_ImgArea);
        }
}

//Canvasクラスを継承し、メソッドをオーバーライドすることで
//独自処理を実行させる。
class AwtTest4_Canvas extends Canvas
{
        public void paint(Graphics g)
        {
                g.drawArc( 10,10,300,300,0,360 );
        }
}

Checkbox

 チェックボックスの使い方です。

 JavaAppletを実行してみる。

☆ チェックボックスのテスト。

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

public class AwtTest5 extends Applet implements ItemListener
{
        Label m_Lbl;    //状態の表示に使う。
        
        public void init()
        {
                m_Lbl = new Label("チェックボックスのテスト。");
                add(m_Lbl);
                Checkbox Check = new Checkbox("テスト");
                Check.addItemListener(this);
                add(Check);     
        }
        
        public void itemStateChanged(ItemEvent Ie)
        {
                Checkbox Check = (Checkbox)Ie.getItemSelectable();
                m_Lbl.setText( Check.getLabel()+"の状態:"+Check.getState() );
        }
        
}

CheckboxGroup(ラジオボタン)

 Windowsで言うラジオボタンの使い方です。
CheckboxGroupというクラスを作成し、これをCheckboxのコンストラクタに渡すことで、ラジオボタンにすることができます。

 JavaAppletを実行してみる。

☆ チェックボックスグループのテスト。

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

public class AwtTest6 extends Applet implements ItemListener
{
        Label m_Lbl;
        
        public void init()
        {
                m_Lbl = new Label("チェックボックスグループのテスト。");
                add(m_Lbl);
                
                CheckboxGroup CheckG = new CheckboxGroup();
                Checkbox Check1 = new Checkbox("テスト1",CheckG,false);
                Check1.addItemListener(this);
                add(Check1);
                Checkbox Check2 = new Checkbox("テスト2",CheckG,false);
                Check2.addItemListener(this);
                add(Check2);
                Checkbox Check3 = new Checkbox("テスト3",CheckG,false);
                Check3.addItemListener(this);
                add(Check3);
        }
        
        public void itemStateChanged(ItemEvent Ie)
        {
                Checkbox Check = (Checkbox)Ie.getItemSelectable();
                m_Lbl.setText(Check.getLabel()+"の状態:"+Check.getState());
        }
}

Choice(コンボボックス)

 Windowsで言うコンボボックスのことです。

 JavaAppletを実行してみる。

☆ チョイスの使い方。

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

public class AwtTest7 extends Applet implements ItemListener
{
        Label m_Lbl;    //状態の表示に使う。
        
        public void init()
        {
                //空白を付け足さないと、文字が最後まで表示されません。
                m_Lbl = new Label("チョイスの使い方テスト。" +
                                "                             ");
                add(m_Lbl);
                Choice Ch = new Choice();
                Ch.addItem("選択肢その1");
                Ch.addItem("選択肢その2");
                Ch.addItem("選択肢その3");
                Ch.addItemListener(this);
                add(Ch);
        }
        
        public void itemStateChanged(ItemEvent Ie)
        {
                Choice Ch = (Choice)Ie.getItemSelectable();
                m_Lbl.setText(Ch.getSelectedItem()+"が選択されています。"+
                                "("+Ch.getSelectedIndex()+"番目"+")");
        }
}

テキストフィールド・テキストエリア(エディットボックス)

 Windowsで言うエディットボックスです。ただし、単一行のコントロールと、複数行のコントロールは同一のものではなく、分かれています。一行だけなのが、テキストフィールド、複数行有るのがテキストエリアです。

 JavaAppletを実行してみる。

☆ テキストフィールドとテキストエリア

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

public class AwtTest8 extends Applet implements ActionListener,TextListener
{
        Label m_Lbl;
        TextArea m_Ta;
        TextField m_Tf;
        public void init()
        {
                m_Lbl = new Label("テキストフィールドとテキストエリアのテスト。"+
                                "                             ");
                add(m_Lbl);
                
                m_Ta = new TextArea(10,10);
                m_Ta.addTextListener(this);
                add(m_Ta);
                
                m_Tf = new TextField(10);
                m_Tf.addActionListener(this);
                m_Tf.addTextListener(this);
                add(m_Tf);
        }
        
        //ActionListenerの実装。
        //TextFieldの中でエンターキーを押すとこのメソッドが反応します。
        //TextAreaではエンターキーは改行になるので、キャッチできません。
        public void actionPerformed(ActionEvent Ae)
        {
                if( Ae.getSource() == m_Tf )
                {
                        m_Lbl.setText("TextFieldのActionEvent : "+Ae.getActionCommand());
                }
        }
        
        //TextListenerの実装。
        public void textValueChanged(TextEvent Te)
        {
                if( Te.getSource() == m_Ta )
                {
                        m_Lbl.setText("(TextAreaのTextListener)TextAreaの内容:"+
                                        m_Ta.getText());
                }
                if( Te.getSource() == m_Tf )
                {
                        m_Lbl.setText("(TextFieldのTextListener)TextFiledの内容:"+
                                        m_Tf.getText());
                }
        }
        
}

リスト(リストボックス)

 Windowsで言うリストボックスです。今回は、複数選択可能なリストボックスをテストしてみます(無論単一選択リストボックスも可能です。コンストラクタでtrueかfalseを設定するだけです)
 マウスで選択した場合と、エンターキーを押した場合の挙動が異なります。

 JavaAppletを実行してみる。

☆ リストの使い方。

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

public class AwtTest9 extends Applet implements ActionListener,ItemListener
{
        Label m_Lbl;
        List m_Lst;
        
        public void init()
        {
                m_Lbl = new Label("リストボックスのテスト。"+
                        "                                                       ");
                add(m_Lbl);
                
                m_Lst = new List(10,true);
                m_Lst.add("リストのテストその1");
                m_Lst.add("リストのテストその2");
                m_Lst.add("リストのテストその3");
                m_Lst.add("リストのテストその4");
                m_Lst.add("リストのテストその5");
                m_Lst.addActionListener(this);
                m_Lst.addItemListener(this);
                add(m_Lst);
        }
        
        //ActionListenerの実装。
        public void actionPerformed(ActionEvent Ae)
        {
                m_Lbl.setText("actionPerformed:"+Ae.getActionCommand());
        }
        
        //ItemLisntenerの実装。
        public void itemStateChanged(ItemEvent Ie)
        {
                List Lst = (List)Ie.getItemSelectable();
                if( Lst == m_Lst )
                {
                        StringBuffer Str = new StringBuffer();
                        Str.append("選択されている項目のindex(itemStateChanged) : ");
                        int[] arr = m_Lst.getSelectedIndexes();
                        for( int i=0 ; i<arr.length ; i++ )
                                Str.append(arr[i]+",");
                        m_Lbl.setText(Str.toString());
                }
        }
}

スクロールバー

 スクロールバーの使い方です。ここで扱うのは、コントロールとして配置するタイプのスクロールバーです。

 JavaAppletを実行してみる。

☆ スクロールバーの使い方。

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

public class AwtTest10 extends Applet implements AdjustmentListener
{
        Label m_Lbl;
        Scrollbar m_Sb;
        
        public void init()
        {
                m_Lbl = new Label("スクロールバーのテストです。"+
                                "                               ");
                add(m_Lbl);
                //コンストラクタの引数:
                //第一引数 : 水平(Scrollbar.HORIZONTAL)か
                //                              垂直(Scrollbar.VERTICAL)か
                //第二引数 : 初期の位置。
                //第三引数 : 幅
                //第四引数 : 最小値
                //第五引数 : 最大値
                m_Sb = new Scrollbar(Scrollbar.HORIZONTAL,50,1,0,100);
                m_Sb.addAdjustmentListener(this);
                add(m_Sb);
        }
        
        public void adjustmentValueChanged(AdjustmentEvent Ae)
        {
                String Str = new String("N/A");
                //スライダーを増加側に動かしたとき
                if( Ae.getAdjustmentType() == AdjustmentEvent.BLOCK_INCREMENT )
                        Str= new String("slider up");
                //スライダーを減少側に動かしたとき
                if( Ae.getAdjustmentType() == AdjustmentEvent.BLOCK_DECREMENT )
                        Str= new String("slider down");
                //スライダーをドラッグしたとき
                if( Ae.getAdjustmentType() == AdjustmentEvent.TRACK )
                        Str= new String("slider tracking");
                //スクロールバーの端にある△ボタンを押したとき。
                if( Ae.getAdjustmentType() == AdjustmentEvent.UNIT_INCREMENT )
                        Str= new String("slider button up");
                //スクロールバーの端にある▽ボタンを押したとき。
                if( Ae.getAdjustmentType() == AdjustmentEvent.UNIT_DECREMENT )
                        Str= new String("slider button down");
                
                Scrollbar Sb = (Scrollbar)Ae.getAdjustable();
                m_Lbl.setText("current pos : "+Sb.getValue()+
                                " / action : "+Str);
        }
}

レイアウトマネージャー(FlowLayout

 レイアウトマネージャーを使わないと、addメソッドでコントロールを追加するたびに、単純に、横に並べられるだけでしたが、レイアウトマネージャーを使うと、好きな場所にコントロールを配置することができます(しかし、厳密に、座標で指定することはしていません)。
 FlowLayoutは一つのコントロールにおいて、ほかのコントロールとの上下左右の間隔を指定することができます。また、コントロールを左・中央・右を基準に整列させたりできます。例では、中央を基準に整列させています。

 JavaAppletを実行してみる。

☆ FlowLayoutの使い方。

import java.applet.*;
import java.awt.*;

public class AwtTest11 extends Applet 
{
        LayoutManager m_Lm;
        public void init()
        {
                int h_span = 10;
                int v_span = 10;
                //レイアウトマネージャーを作成し、
                //このレイアウトマネージャーを使用することを設定。
                m_Lm = new FlowLayout(FlowLayout.CENTER,h_span,v_span);
                setLayout(m_Lm);
                
                //テスト用にボタンを配置してみる。
                Integer[] NumArray = new Integer[1];
                for( int c=0 ; c<75 ; c++ )
                {
                        NumArray[0] = new Integer(c);
                        
                        String Str = new String( "Button "+String.format("%03d",NumArray) );
                        add(new Button(Str));
                }
        }
}

レイアウトマネージャー(BorderLayout

 ボーダーレイアウトの使い方です。東・西・南・北・真ん中、とちょっと変わった配置ができます。もちろん、五個コントロールを追加する必要が有るわけではありませんが、五個以下である必要が有るようです。

 JavaAppletを実行してみる。

☆ BorderLayoutの使い方。

import java.applet.*;
import java.awt.*;

public class AwtTest12 extends Applet
{
        BorderLayout m_Bl;
        
        public void init()
        {
                m_Bl = new BorderLayout(10,10);
                setLayout(m_Bl);
                
                add(new Button("その1(上)"),"North");
                add(new Button("その2(下)"),"South");
                add(new Button("その3(左)"),"West");
                add(new Button("その4(右)"),"East");
                add(new Button("その5(真ん中)"),"Center");
        }
}

レイアウトマネージャー(GridLayout

 グリッドレイアウトは、GridLayoutクラスのコンストラクタに何列、何行という引数を指定することで、表のような状態になり、そこにコントロールを入れていくレイアウトです。
 またgetInsetsメソッドをオーバーライドすることで、ウインドウの枠とコントロールの上下左右の間隔を指定できます。

 JavaAppletを実行してみる。

☆ GridLayout

import java.applet.*;
import java.awt.*;

public class AwtTest13 extends Applet
{
        GridLayout m_Gl;
        
        public void init()
        {
                m_Gl = new GridLayout(10,2,5,5);
                setLayout(m_Gl);
                
                for( int i =0 ; i < 20 ;i++ )
                {
                        String Str = new String("ボタン"+i);
                        add(new Button(Str));
                }
        }
        
        public Insets getInsets()
        {
                Insets Set = new Insets(50,50,50,50);
                return Set;
        }
}

パネル

 パネルはレイアウトマネージャーにaddできます。またパネルにもボタンなどをaddできます。パネルにいくらかコントロールをまとめてaddし、それをレイアウトマネージャーにaddすることで、コントロールの配置にまとまりが出ます。

 JavaAppletを実行してみる。

☆ Panelの使い方。

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

public class AwtTest14 extends Applet
{
        GridLayout m_Layout;
        Panel m_Pnl;
        public void init()
        {
                m_Layout = new GridLayout(2,2,10,10);
                //ウインドウのレイアウト設定。
                setLayout(m_Layout);
                
                int i;
                m_Pnl = new Panel();
                //パネル内のレイアウト設定。
                m_Pnl.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
                for( i=0 ; i<8 ; i++ )
                        m_Pnl.add(new Button("ボタン"+i));
                add(m_Pnl);     //パネルの追加。
                add(new Button("ボタン"+i++));
                add(new Button("ボタン"+i++));
                add(new Button("ボタン"+i++));
        }
}

Frame

 windowクラスの子クラスがFrameというクラスです。Frameクラスを継承し、そのクラスのインスタンスを作成することで、WindowsAPIで言うCreateWindowで作成したようなウインドウが作成できます。
 Frameクラスについては「 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Frame.html 」を参照。

 JavaAppletを実行してみる。(今回はウインドウを作成するコードが有るため、ブラウザがそれに対して警告を行なう場合があります。)

☆ Frameの使い方。

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


public class AwtTest15 extends Applet
{
        AwtTest15_Frame m_Frame;
        public void init()
        {
                m_Frame = new AwtTest15_Frame("フレームだよん。");
                m_Frame.setVisible(true);       //ウインドウを表示する。
                m_Frame.setSize(640,480);       //ウインドウサイズの指定。
        }
}

class AwtTest15_Frame extends Frame implements WindowListener
{
        Label m_Lbl;    //メッセージ表示用に使うラベル。
        
        //以下は、WindowListenerインターフェイスの実装。
        
        //ウインドウがアクティブになったときの処理。
        public void windowActivated(WindowEvent We)
        {
                m_Lbl.setText("windowActivated");
        }
        //ウインドウが閉じられたときの処理。
        public void windowClosed(WindowEvent We)
        {
                m_Lbl.setText("windowClosed");
        }
        //ウインドウを閉じるメッセージが来たときの処理。
        public void windowClosing(WindowEvent We)
        {
                m_Lbl.setText("windowClosing");
                dispose();      //ウインドウを消す。
        }
        //ウインドウがアクティブではなくなったときの処理。
        public void windowDeactivated(WindowEvent We)
        {
                m_Lbl.setText("windowDeactivated");
        }
        //ウインドウが最小化されたときの処理。
        public void windowDeiconified(WindowEvent We)
        {
                m_Lbl.setText("windowDeiconified");
        }
        //ウインドウが最小化状態から復帰したときの処理。
        public void windowIconified(WindowEvent We)
        {
                m_Lbl.setText("windowIconified");
        }
        //ウインドウが作られたとき呼ばれる。
        public void windowOpened(WindowEvent We)
        {
                m_Lbl.setText("windowOpened");
        }
        
        
        public AwtTest15_Frame(String WindowTitle)
        {
                super(WindowTitle);     //ウインドウのタイトル設定。
                addWindowListener(this);
                
                m_Lbl = new Label("Frameのテスト。    ");
                add(m_Lbl);
        }
}

メニューバー

 メニューバーの使い方です。

 JavaAppletを実行してみる。

☆ メニューバーの使い方。

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

public class AwtTest16 extends Applet
{
        AwtTest16_Frame m_Frame;
        public void init()
        {
                m_Frame = new AwtTest16_Frame();
                m_Frame.setSize(640,480);
                m_Frame.setVisible(true);               
        }
}

class AwtTest16_Frame extends Frame implements ActionListener,ItemListener,WindowListener
{
        Label m_Lbl;
        MenuBar m_Menubar;
        Menu m_Menu1,m_Menu2;
        MenuItem m_Mi1,m_Mi2,m_Mi3;
        CheckboxMenuItem m_MChk1,m_MChk2,m_MChk3;
        
        
        public void actionPerformed(ActionEvent Ae)
        {
                if( Ae.getSource() == m_Mi1 )
                        m_Lbl.setText("メニュー1−1が押されました。");
                if( Ae.getSource() == m_Mi2 )
                        m_Lbl.setText("メニュー1−2が押されました。");
                if( Ae.getSource() == m_Mi3 )
                        m_Lbl.setText("メニュー1−3が押されました。");
        }
        
        public void itemStateChanged(ItemEvent Ie)
        {
                CheckboxMenuItem Check = (CheckboxMenuItem)Ie.getSource();
                if( Check == m_MChk1 )
                        m_Lbl.setText("メニュー2−1が選択されました。");
                if( Check == m_MChk2 )
                        m_Lbl.setText("メニュー2−2が選択されました。");
                if( Check == m_MChk3 )
                        m_Lbl.setText("メニュー2−3が選択されました。");
                /*
                ちなみに、
                チェックされているかされていないかは、
                boolean Check.getState();
                で調べる。
                また、プログラム側からチェックした状態にしたい場合は              
                Check.setState(true);
                とする。チェックして無い状態にするにはtrueをfalseにする。
                */
        }
        
        //ウインドウがアクティブになったときの処理。
        public void windowActivated(WindowEvent We)
        {
        }
        //ウインドウが閉じられたときの処理。
        public void windowClosed(WindowEvent We)
        {
        }
        //ウインドウを閉じるメッセージが来たときの処理。
        public void windowClosing(WindowEvent We)
        {
                dispose();      //ウインドウを消す。
        }
        //ウインドウがアクティブではなくなったときの処理。
        public void windowDeactivated(WindowEvent We)
        {
        }
        //ウインドウが最小化されたときの処理。
        public void windowDeiconified(WindowEvent We)
        {
        }
        //ウインドウが最小化状態から復帰したときの処理。
        public void windowIconified(WindowEvent We)
        {
        }
        //ウインドウが作られたとき呼ばれる。
        public void windowOpened(WindowEvent We)
        {
        }
        
        AwtTest16_Frame()
        {
                super("メニューのテストです。");
                
                addWindowListener(this);
                
                m_Lbl = new Label("メニューのテスト。");
                add(m_Lbl);
                
                
                //メニューバーの作成。
                m_Menubar = new MenuBar();
                setMenuBar(m_Menubar);
                
                //メニューの作成。
                m_Menu1 = new Menu("メニュー項目その1");
                m_Menubar.add(m_Menu1);
                //メニューの中の項目を作成。
                m_Mi1 = new MenuItem("メニュー1−1");
                m_Menu1.add(m_Mi1);
                m_Mi1.addActionListener(this);
                m_Mi2 = new MenuItem("メニュー1−2");
                m_Menu1.add(m_Mi2);
                m_Mi2.addActionListener(this);
                m_Mi3 = new MenuItem("メニュー1−3");
                m_Menu1.add(m_Mi3);
                m_Mi3.addActionListener(this);
                
                //メニューの作成(チェックボックスタイプ)。
                m_Menu2 = new Menu("メニュー項目その2");
                m_Menubar.add(m_Menu2);
                //メニューの中の項目を作成。         
                m_MChk1 = new CheckboxMenuItem("メニュー2−1");
                m_Menu2.add(m_MChk1);
                m_MChk1.addItemListener(this);
                m_MChk2 = new CheckboxMenuItem("メニュー2−2");
                m_Menu2.add(m_MChk2);
                m_MChk2.addItemListener(this);
                m_MChk3 = new CheckboxMenuItem("メニュー2−3");
                m_Menu2.add(m_MChk3);
                m_MChk3.addItemListener(this);
        }
}

ダイアログ

 モードレス・モーダルダイアログがコンストラクタでの引数の指定で設定可能です。

 JavaAppletを実行してみる。

☆ ダイアログの使い方。

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

public class AwtTest17 extends Applet
{
        AwtTest17_Dialog m_Dlg;
        public void init()
        {
                m_Dlg = new AwtTest17_Dialog(null);
        }
}

class AwtTest17_Dialog extends Dialog
{
        AwtTest17_Dialog(Frame Parent)
        {
                //親のコンストラクタの第三引数が
                //true or falseでモードレスがモーダルになる。
                //trueだとモーダル、falseだとモードレスになる。
                super(Parent,"モードレスダイアログのテストです。",false);
                
                //WindowListenerを設定する。
                addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent We)
                        {
                                dispose();
                        }
                });
                
                //テストのため、ダイアログにコントロールを配置してみる。
                setLayout(new GridLayout(5,5,10,10));
                for( int i=0 ; i<25 ; i++ )
                {
                        add(new Button("ボタン"+i));
                }
                setVisible(true);
                setSize(640,480);
        }
        
        //getInsetsメソッドをオーバーライドすることで
        //コントロールを配置する場所のspanを設定。
        public Insets getInsets()
        {
                return new Insets(50,20,20,20);
        }
        
}

ファイルダイアログ

 WindowsAPIで言う、GetOpenFileName・GetSaveFileName関数みたいなやつです。

 JavaAppletを実行してみる。

☆ ファイルダイアログのテスト。

import java.applet.*;
import java.awt.*;

public class AwtTest18 extends Applet
{
        Label m_Lbl;
        public void init()
        {
                m_Lbl = new Label("ファイル名前の取得ダイアログのテスト。");
                add(m_Lbl);
                
                //FileDialog.LOADかFileDialog.SAVEの指定で、
                //ダイアログのメッセージが、保存用or読み出し用かで変化します。
                FileDialog Fd = new FileDialog((Frame)null,
                                "ファイル名前の取得ダイアログ",FileDialog.LOAD);
                //モーダルダイアログの表示。
                //ファイルのパスを取得したら制御が帰ってくる。
                Fd.setVisible(true);
                
                //取得したファイルパスを表示する。
                m_Lbl.setText("取得したパス: "+
                                Fd.getDirectory()+Fd.getFile());
        }
}