スポンサードリンク

Java 1つのクラスから複数のウィンドウを表示する。

前回はJavaのAWTでウィンドウを表示しました。Frame クラスを継承した PrefFrame クラスを作り、PrefTest クラスからインスタンスを生成して利用しました。

ウィンドウの設定などは PrefTest クラス側に書いていましたが、実は PrefFrame クラスのコンストラクタに書いてもかまいません。または PrefFrame クラスに main() メソッドを作り、クラス自身のインスタンスを生成させれば、 PrefTest クラスは不要です。

でも他のクラスからインスタンスを生成したり、ウィンドウを設定できると、1つのクラスから設定の異なる複数のウィンドウを表示できるメリットがあります。


【1】sample200 フォルダをフォルダごとコピーして、sample201 フォルダを作ります。

java-428.gif


【2】今回は以下のようなファイル構成になりますので、コピーした余計なものは削除してください。

java-429.gif


【3】PrefTest.java を以下のように変更します。

*「\」はWindowsではエンマークのことです。

保存先 C:\java\sample201
ファイル名 PrefTest.java

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

class PrefFrame extends Frame {

    public PrefFrame(String title) {
      //フレームのタイトル
      setTitle(title);

      //ウィンドウを閉じる時
      addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
          System.exit(0);
        }
      });

    }
}


public class PrefTest {

  public static void main(String args[]) {
    PrefFrame frm = new PrefFrame("都道府県マスター");
    frm.setLocation(200, 200);
    frm.setSize(250, 350);
    frm.setBackground(Color.LIGHT_GRAY);
    frm.setVisible(true);

    PrefFrame frm2 = new PrefFrame("都道府県マスター2");
    frm2.setLocation(500, 200);
    frm2.setSize(350, 450);
    frm2.setBackground(new Color(255, 200, 0));
    frm2.setVisible(true);
  }

}



【4】コマンドプロンプトを起動して、カレントディレクトリを sample201 に切り替えます。

java-430.gif


【5】javac PrefTest.java と入力し、コンパイルします。

java-431.gif


【6】java PrefTest と入力し、プログラムを実行します。

java-432.gif


【7】設定の異なるウィンドウが2つ表示されました。

java-433.gif


【8】ウィンドウを閉じます。どちらのウィンドウを閉じてもシステムは終了します。

java-434.gif


【解説】

(1)1つのクラスから2つのインスタンスを生成し、異なる設定をしてウィンドウを表示しています。

PrefFrame frm = new PrefFrame("都道府県マスター");
frm.setLocation(200, 200);
frm.setSize(250, 350);
frm.setBackground(Color.LIGHT_GRAY);
frm.setVisible(true);

PrefFrame frm2 = new PrefFrame("都道府県マスター2");
frm2.setLocation(500, 200);
frm2.setSize(350, 450);
frm2.setBackground(new Color(255, 200, 0));
frm2.setVisible(true);


(2)背景色の設定の仕方を比べてください。

・Colorクラスの定数を引数にしている。
frm.setBackground(Color.LIGHT_GRAY);

・Colorクラスを生成し、コンストラクタでRGBの値を引数にしている。
frm2.setBackground(new Color(255, 200, 0));


これを応用すると、例えば都道府県マスターと市町村マスターで、マスターとして共通の部分をまとめて、細かい設定は他のクラスから行うことができます。

今回は「こういうこともできるんだ」という感じをつかんで欲しいため、都道府県マスターのウィンドウを異なる大きさで表示してみましたが、このような使われ方はあまりしないと思います。参考程度にしておいてください。


スポンサードリンク






Java初心者入門講座TOPへ