ここでは、Test4の初期化部分に新しい命令が追加になっています。
Label mylabel;
mylabel = new Label ("Hello World.");
this.add ("Center",mylabel);
Button mybutton;
mybutton = new Button ("OK");
this.add ("South",mybutton);
この6行です。ざっと見ただけで、何をしているものか何となくわかるでしょう?
最初の3行は「Hello World」というテキストを表示する「
ラベル」クラスの部品を作るもので、後半の3行は「OK」という「
ボタン」クラスの部品を作るものです。awtでは、このボタンやラベルのように具体的にウィンドウに配置するオブジェクトのことを「
コンポーネント」と呼んでいます。
この2つのコンポーネントは、いずれもawtパッケージの中に用意されているものです。最初にimportでawtの全クラスを使えるようにしていますから、newでこうしたコンポーネントを作れるのですね。では、ざっと役割を見てみましょう。
Label mylabel;
Labelを収める変数「mylabel」を定義する。
mylabel = new Label ("Hello World.");
変数mylabelに、新しく作ったLabelクラスを入れる。
this.add ("Center",mylabel);
myLabelをウィンドウ中央に組み込む。
Button mybutton;
Buttonを収める変数「mybutton」を定義する。
mybutton = new Button ("OK");
変数mybuttonに、新しく作ったButtonクラスを入れる。
this.add ("South",mybutton);
mybuttonをウィンドウの下部に組み込む。
新しく登場したのは「
add」というものですね。これでラベルとボタンをウィンドウに組み込んでいます。このaddは、
《クラス1》.add (《場所》,《クラス2》);
こんな具合に使われます。これで《クラス1》に《クラス2》が組み込まれます。組み込むクラスによっては《場所》の指定ができないものもありますが、ウィンドウの場合は、「North」「Center」「South」という指定をすることで、ウィンドウの上・中央・下に部品を配置できるようになっています。
実は、このaddは様々な書き方ができます。例えば上のソースコードは、こんな具合に書くこともできます。
Label mylabel;
mylabel = new Label ("Hello World.");
this.add (mylabel,BorderLayout.CENTER);
Button mybutton;
mybutton = new Button ("OK");
this.add (mybutton,BorderLayout.SOUTH);
これは、
addのところの書き方が逆になってますね? 最初にmylabelなどがきて、その後に
BorderLayout.CENTERなんてものが書いてあります。これは、
BorderLayoutというクラスにある
CENTERという定数を使っているんですね。文字列で指定する他に、こんな具合にクラスに用意されている定数を使った書き方なんてのもあります。――実はこっちのほうが割と一般的なんですが、なんか難しそうなので、「
Center」って文字で指定する書き方を優先しておきました。まあ、「いろんな書き方があるんだ」ってことだけ覚えていれば今のところはいいんでしょう。
また、ここでは
addのあるクラスとして「
this」というのが使われていますね。前回触れましたが、これは部品を組み込んでるTest4自身を示すものです。自分自身に部品を組み込むのにこういう書き方をしたんですね。これはもちろん、省略して単に「add()」でも大丈夫です。
このウィンドウのように、別のクラスを組み込んでしまえるクラスのことを「コンテナ」と呼びます。コンテナは、自分自身の中に全く別のコンテナやコンポーネントを組み込むことができます。
awtには多くのコンテナとコンポーネントが用意されています。これらを組み合わせてウィンドウのレイアウトをするのですね。