ラベルを貼ろう


コンテナにラベルを追加する

さて、いよいよGUIの部品をアプレットに張りつける作業を覚えましょう
ラベルとは、GUI上で表示される文字列の部品です
これをテキストエリアのようにユーザーが変更することはできません

GUI部品を追加するにはjava.awt.Containerクラスのことを知る必要があります
このクラスは、Componentクラスを拡張していて、AppletクラスはContainerクラスを拡張しています
コンポーネントをコンテナに追加するには、このクラスのadd()メソッドを使用します

public Component add( Component comp )
public Component add( Component comp, int index )

compには、追加するコンポーネントを指定します。戻り値はcompの値です
コンポーネントの生成方法は、このあとで説明します
indexは、コンポーネントの配置位置をコンポーネントナンバーで指定します
最初のコンポーネントを0番として、それぞれ割り当てられています
コンポーネントの最後に配置したい場合は-1を指定します

ラベルを作成するにはjava.awt.Labelクラスを使用します
このクラスのオブジェクトをadd()メソッドに渡せば、コンテナにコンポーネントが追加されます
Labelクラスのコンストラクタは次のとおりです

public Label()
public Label( String text )
public Label( String text, int alignment )

textには、ラベルに表示される文字列を指定します
alignmentには、ラベルを表示させる配置方法を定数で指定します
引数に何も指定しなかった場合は、空のラベルを生成します

ラベルの配置位置を指定する定数は、Labelクラスに定数として用意されています
alignmentに指定できる定数は、次のいずれかです

public static final int CENTER 中央ぞろえ
public static final int LEFT 左詰め
public static final int RIGHT 右詰め

こうしてLabelのインスタンスを生成できれば、あとはそれをadd()メソッドへ渡せば良いのです
コンポーネントの表示位置は、プラットフォームで異なるため
Javaが動的に位置を変更してくれます(レイアウトに関しては後記)
import java.applet.Applet;
import java.awt.*;

/*	<applet code="App27.class" width="300"height="300">
 	</applet>
*/

public class App27 extends Applet {
	static final String STR = "Kitty on your lap";
	public void init() {
		setBackground(Color.white);
		add(new Label(this.STR , Label.LEFT));
		add(new Label(this.STR , Label.CENTER));
		add(new Label(this.STR , Label.RIGHT));
	}
}
アプレット

また、add()メソッドでは、コンテナに追加するときに配置を指定できました
ここで番号を指定すれば、あとで追加されたコンポーネントを
先に作成されていたコンポーネントの間に配置することができます
ただし、作成した時点で存在しないコンポーネントナンバーは指定できません(例外が発生します)
import java.applet.Applet;
import java.awt.*;

/*	<applet code="test.class" width="300"height="300">
 	</applet>
*/

public class test extends Applet {
	public void init() {
		setBackground(Color.white);
		add(new Label("Kitty on your lap"));
		add(new Label("LOVE HINA") , 0);
		add(new Label("Card Captor Sakura") , 1);
	}
}
この場合は、後半で作成されたコンポーネントが配置に割り込みます
結果として、LOVE HINA Card Captor Sakura Kitty on your lap という順番になります

Labalクラスには、他にもオブジェクト操作をするためのメソッドが用意されています
ピアの作成などは後記するとして、ラベルの状態を取得するメソッドを紹介します

ラベルの現在の位置揃え情報を取得するにはgetAlignment()メソッドを
ラベルのテキストを得るにはgetText()メソッドを使用します

public int getAlignment()
public String getText()

それぞれ、要求したデータを返してくれます
次のプログラムはこの機能を利用して、コンソールにラベルのデータを出力します
import java.applet.Applet;
import java.awt.*;

/*	<applet code="test.class" width="300"height="300">
 	</applet>
*/

public class test extends Applet {
	public void init() {
		int label_align;
		setBackground(Color.white);
		Label l = (Label)add(new Label("Kitty on your lap" , Label.CENTER));
		System.out.println(l.getText());

		System.out.print("This component alignment = ");
		label_align = l.getAlignment();
		switch(label_align) {
		case Label.LEFT:
			System.out.println("LEFT");
			break;
		case Label.CENTER:
			System.out.println("CENTER");
			break;
		case Label.RIGHT:
			System.out.println("RIGHT");
			break;
		default:
			System.out.println("NULL");
		}
	}
}
次に、動的にラベルの文字列や位置を変更する方法を覚えましょう
文字列を出力するのに、drawString()メソッドを使用した場合との違いを感じるはずです
ラベルとして表示すると、その文字をクラスのメンバ(つまり、オブジェクト)として扱うことができます
ということは、そのデータを変更しただけで文字を変更することができるのです
drawString()の場合は、再描画しなければいけませんでしたね

イベントの発生はすでにやりました
ここでは、MouseListenerを使用しましょう

ラベルの文字列を変更するにはsetText()メソッドを
位置を変更するにはsetAlignment()メソッドを使用します

public synchronized void setText( String text )
public synchronized void setAlignment( int alignment )

setText()のtextには、変更する文字列を指定します
setAlignment()のalignmentには、Libalクラスで用意されている定数のいずれかを指定します
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

/*	<applet code="App28.class" width="300"height="300">
 	</applet>
*/

public class App28 extends Applet implements MouseListener {
	Label l;
	public void init() {
		setBackground(Color.white);
		l = (Label)add(new Label("Kitty on your lap" , Label.LEFT));
		addMouseListener(this);
	}
	public void mouseClicked(MouseEvent e) { }
	public void mouseEntered(MouseEvent e) {
		l.setAlignment(Label.CENTER);
	}
	public void mouseExited(MouseEvent e) {
		l.setAlignment(Label.LEFT);
	}
	public void mousePressed(MouseEvent e) {
		l.setText("LOVE HINA");
	}
	public void mouseReleased(MouseEvent e) {
		l.setText("Kitty on your lap");
	}
}
アプレット

マウスをコンポーネント上に移動させたり
コンポーネント上でマウスをクリックすると、ラベルの位置や文字が変わります

このように、イベントとGUIオブジェクトを操作することで
強力で実用的なアプリケーションやアプレットが生成できますね



前のページへ戻る次のページへ