Frame,メニュー,Dialogの使用例


Appletの[開けウインドウ]ボタンをクリックすれば,Frameウインドウが開く。
Frameウインドウについては,<ファイル|使用法>メニューを参照して下さい。
Java Appletです

ソースコード

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

public class ja207 extends Applet
{
  Button btn = new Button("開けウインドウ");
  Label lbl = new Label("ここをクリックすれば別ウインドウが開きます");

  public void init(){
    setLayout(null);  //レイアウトマネージャーを使わない
    add(lbl);
    lbl.reshape(10,10,230,15);  //ラベルを指定位置に配置
    add(btn);
    btn.reshape(10,30,90,20);   //ボタンを指定位置に配置
  }

  public boolean action(Event e,Object o){
    if(e.target == btn){    //[開く]ボタンをクリック
      ja207Frame FW = new ja207Frame();//ja207Frame()コンストラクタを呼び出し,フレームウインドウを生成する
      FW.resize(600,300);   //フレームウインドウのサイズを設定
      FW.show();            //フレームウインドウを開く
      return true;
    }
    return false;
  }
}

class ja207Frame extends Frame
{
  Font f = new Font("TimesRoman",Font.PLAIN,16);
  int n = 16;   //フォントサイズを格納する変数
  Label LA;     //ラベル
  TextArea TA;  //テキストエリア
  Button BT;    //ボタン
  MenuBar MB;   //メニューバー
  Menu MNU1,MNU2,MNU3,MNU4;   //メニュー

  String s1 = "[情報]メニューから項目を選択すれば,その説明文を表示する。\n" +
              "[フォント]メニューからフォントサイズを選択し,さらにフォントスタイルを選択 \n" +
              "すれば,TextAreaのフォントを変更できる。\n" +
              "[その他]メニューから<バージョン情報>を選択すれば,DialogBox \n" +
              "が開きバージョン情報(?)を知らせます。 \n" +
              "<ファイル|終了>メニュー,又は下部の[閉じる]ボタンでウインドウを閉じます。";
  String s2 = "・Appletとは独立した別個のウインドウを開く。\n" +
             "・Frameウインドウにはメニューを作成できる。\n" +
             "・Frameウインドウにも,Applet同様にコンポーネントを自由に配置し利用できる。\n" +
             "・FrameウインドウからDialogBoxを開けれる。";
  String s3 = "1)extends Frameされたユーザー定義クラスを作る。\n" +
             "   ・コンストラクタの定義 \n" +
             "   ・Frameウインドウを終了するイベント処理(dispose()を使う)\n" +
             "2)Appletクラスで \n" +
             "   ・1)のFrameサブクラスのインスタンスを生成する。 \n" +
             "   ・show()メソッドでFrameウインドウを開く。";
  String s4 = "1)MenuBarクラスのインスタンスを作る。\n" +
             "2)setMenuBar()でMenuBarをFrameウインドウにセットする。\n" +
             "3)Menuクラスのインスタンスを作る.\n" +
             "4)MenuBarにMenuをadd(登録)する。\n" +
             "5)MenuItemをMenuにadd(登録)する。\n" +
             "6)action()で,各MenuItemごとの実行したい処理を記述。";

  public ja207Frame(){  //コンストラクタの定義
    setTitle("Frame使用例");  //Frameウインドウのタイトルを設定
    setBackground(Color.yellow);    //Frameウインドウに背景色を黄色に
    LA = new Label("ここに情報を表示します",Label.CENTER);
    LA.setFont(f);
    LA.setForeground(Color.blue); //ラベルの文字色を青に
    add("North",LA);  //ラベルを配置(FrameのデフォルトはBorderLayout)
    TA = new TextArea(10,40);   //テキストエリアを作成
    TA.setFont(f);
    TA.setEditable(false);  //TextAreaを編集不可に設定
    add("Center",TA); 
    BT = new Button("閉じる");  //ボタンの作成と配置
    add("South",BT);

    MB = new MenuBar(); //メニューバーを作成し,フレームウインドウにセットする
    setMenuBar(MB);

    MNU1 = new Menu("ファイル",true); //<ファイル>メニューを作成
    MNU1.add("使用法");   //<ファイル>メニューに<使用法>項目を追加
    MNU1.addSeparator();    //メニューに区切り線を入れる
    MNU1.add("終了");   //<ファイル>メニューに<終了>項目を追加
    MB.add(MNU1);   //<ファイル>メニューをメニューバーに配置

    MNU2 = new Menu("情報");  //<情報>メニューと,その下の各メニュー項目の作成
    MNU2.add("Frameの概要");
    MNU2.add("Frameの作成手順");
    MNU2.add("メニューの作成法");
    MB.add(MNU2);

    MNU3 = new Menu("フォント");  //<フォント>メニューと,その下の各メニュー項目を作成
    Menu MNU3_sub1 = new Menu("フォントスタイル");  //<フォント>メニューの下にサブメニューを作成
    MNU3_sub1.add("標準");    //以下,サブメニュー項目
    MNU3_sub1.add("太字");
    MNU3_sub1.add("斜体");
    MNU3_sub1.add("太字斜体");
    MNU3.add(MNU3_sub1);
    MNU3.add("-");    //メニューに区切り線を入れる
    Menu MNU3_sub2 = new Menu("フォントサイズ");  //<フォント>メニューの下にサブメニューを作成
    MNU3_sub2.add("10ポイント");
    MNU3_sub2.add("12ポイント");
    MNU3_sub2.add("16ポイント");
    MNU3_sub2.add("20ポイント");
    MNU3.add(MNU3_sub2);
    MB.add(MNU3);     //<フォント>メニューをメニューバーに配置

    MNU4 = new Menu("その他");   //<その他>メニューの作成
    MNU4.add("バージョン情報");
    MB.add(MNU4);
  }

  public boolean action(Event e,Object o){
    if(e.target instanceof MenuItem){     //メニュー項目を選択した時の処理
      if(o.equals("使用法")){   //Object o はメニュー項目のラベル文字列となる
        LA.setText("このウインドウの簡易マニュアル");//ラベルの表示文字列の変更
        TA.setText(s1);   //TextAreaにs1文字列を表示
      }
      if(o.equals("終了"))dispose();  //Frameウインドウと閉じる
      if(o.equals("Frameの概要")){
        LA.setText("Frameの概要");
        TA.setText(s2);
      }
      if(o.equals("Frameの作成手順")){
        LA.setText("Frameウインドウの作成手順");
        TA.setText(s3);
      }
      if(o.equals("メニューの作成法")){
        LA.setText("メニューの作成法");
        TA.setText(s4);
      }
      //以下で,TextAreaのフォントを変更する
      if(o.equals("標準"))TA.setFont(new Font("TimesRoman",Font.PLAIN,n));
      if(o.equals("太字"))TA.setFont(new Font("TimesRoman",Font.BOLD,n));
      if(o.equals("斜体"))TA.setFont(new Font("TimesRoman",Font.ITALIC,n));
      if(o.equals("太字斜体"))TA.setFont(new Font("TimesRoman",Font.BOLD+Font.ITALIC,n));
      if(o.equals("10ポイント"))n = 10;
      if(o.equals("12ポイント"))n = 12;
      if(o.equals("16ポイント"))n = 16;
      if(o.equals("20ポイント"))n = 20;

      if(o.equals("バージョン情報")){  //<その他|バージョン情報>メニュー
        ja207Dialog DB = new ja207Dialog(this,"バージョン情報");//Dialogボックスを作成
        DB.resize(200,180);   //DialogBoxのサイズ設定
        DB.show();    //DialogBoxを開く
      }
      return true;
    }
    if(e.target == BT){   //[閉じる]ボタンのクリック時
      dispose();    //Frameウインドウと閉じる
      return true;
    }
		return false;
  }

  public boolean handleEvent(Event e){
    if(e.id == Event.WINDOW_DESTROY){   //Java.awt.Eventクラスの定数
      dispose();  //右上の[×]ボタンでウインドウを閉じる(Frameが使うシステムリソースを廃棄)
    }
    return super.handleEvent(e);
  }
}

class ja207Dialog extends Dialog
{
  Label LA1 = new Label("作成者: Kodayan",Label.CENTER);
  Label LA2 = new Label("作成日: 1998/7/8",Label.CENTER);
  Label LA3 = new Label("バージョン番号:123456.7890x",Label.CENTER);
  Button BT = new Button("閉じる");

  ja207Dialog(Frame fw,String title){ //Dialogのコンストラクタ
    super(fw,title,true); //モーダルDialogを作成
    setLayout(null);  //デフォルトのレイアウトマネージャーを使わないで,ラベルとボタンを配置
    add(LA1);
    LA1.reshape(10,60,180,15);
    add(LA2);
    LA2.reshape(10,80,180,15);
    add(LA3);
    LA3.reshape(10,100,180,20);

    add(BT);
    BT.reshape(140,150,40,20);
  }

  public boolean handleEvent(Event e){
    if(e.id == Event.WINDOW_DESTROY)dispose(); //DialogBoxの右上[閉じる]ボタン
    return super.handleEvent(e);
  }

  public boolean action(Event e,Object o){
    if(e.target == BT)dispose();  //[閉じる]ボタンでDialogBoxを閉じる
    return false;
  }
}

末尾