ラベル


テキスト表現

Swing のラベルは、テキストを表示するだけのコンポーネントだけではなく
アイコンなどを用いた高度な表現力を持ったラベルです

Swing のラベルは javax.swing.JLabel で実装されます
java.lang.Object
  |
  +--java.awt.Component
        |
        +--java.awt.Container
              |
              +--javax.swing.JComponent
                    |
                    +--javax.swing.JLabel

public class JLabel extends JComponent
	implements SwingConstants, Accessible
このクラスは、次のようなコンストラクタを公開しています

public JLabel()
public JLabel(Icon image)
public JLabel(Icon image , int horizontalAlignment)
public JLabel(String text)
public JLabel(String text , int horizontalAlignment)
public JLabel(String text , Icon icon , int horizontalAlignment)

image にはラベル・コンポーネントが使用するアイコンを
horizontalAlignment は SwingConstants で定義されている定数のうち
LEFT、CENTER、RIGHT、LEADING、または TRAILING のうちのいずれかを指定します
text は、ラベルに表示するテキストを指定します

Swing コンポーネントは、配置や方向指定を行うために定数を用います
この定数は javax.swing.SwingConstants インターフェイスで定義されています

public interface SwingConstants

このインターフェイスは、位置情報を指定するための定数のみを保有しています
このインターフェイスが定義する定数フィールドは次のようなものがあります

定数フィールド解説
BOTTOM ボックスの下端を指定するために使用するボックス配置定数です
CENTER 領域内の中央位置です
EAST 東 (右) の方角です
HORIZONTAL 水平方向です
LEADING 左から右に記述する言語および右から左に記述する言語で
使用するテキストのリーディングエッジを指定します
LEFT ボックスの左端を指定するために使用するボックス配置定数です
NEXT シーケンス内の次の方向を指定します
NORTH 北 (上) の方角です
NORTH_EAST 北東 (右上) の方角です
NORTH_WEST 北西 (左上) の方角です
PREVIOUS シーケンス内の前の方向を指定します
RIGHT ボックスの右端を指定するために使用するボックス配置定数です
SOUTH 南 (下) の方角です
SOUTH_EAST 南東 (右下) の方角です
SOUTH_WEST 南西 (左下) の方角です
TOP ボックスの上端を指定するために使用するボックス配置定数です
TRAILING 左から右に記述する言語および右から左に記述する言語で
使用するテキストのトレーリングエッジを指定します
VERTICAL 垂直方向です
WEST 西 (左) の方角です

Swing コンポーネントの位置情報は、これらを使って指定することができます
例えば、ラベルのアイコンやテキストを中央揃えにしたい場合は CENTER を渡すと良いでしょう
import java.awt.*;
import javax.swing.*;

public class Test extends JApplet {
	public void init() {
		Icon icon = new ImageIcon("icon.jpg");
		JLabel label = new JLabel(
			"Kitty on your lap" , icon , SwingConstants.CENTER);
		getContentPane().add(label);
	}
}


このプログラムは、アイコン付きのラベルを表示しています
ラベルが持つプロパティ情報は、メソッドを介して設定/取得することができます

アイコンは JLabel.setIcon() メソッドで設定し
JLabel.getIcon() メソッドを用いて取得することができます

public void setIcon(Icon icon)
public Icon getIcon()

icon には、新しく設定するアイコンを指定します
テキストを設定するには JLabel.setText()
取得するには JLabel.getText() メソッドを用います

public void setText(String text)
public String getText()

text には、表示する新しいテキストを指定します

さらに、コンストラクタでは設定しきれないような細かい位置情報も
メソッドを用いて指定することができます
ラベルの内容の X 軸の位置は JLabel.HorizontalAlignment()
Y 軸の位置は JLabel.setVerticalAlignment() メソッドを使います
もちろん、これらの情報を取得する get〜() メソッドも存在します

public void setHorizontalAlignment(int alignment)
public void setVerticalAlignment(int alignment)
public int getHorizontalAlignment()
public int getVerticalAlignment()

alignment には、位置情報を示す SwingConstants の定数を指定します
X 軸に対しては、LEFT、CENTER、RIGHT、LEADING、または TRAILING のうちの 1 つ
Y 軸に対しては、TOP、CENTER、または BOTTOM のうちの 1 を指定することができます
import java.awt.*;
import javax.swing.*;

public class Test extends JApplet {
	public void init() {
		JLabel label = new JLabel(new ImageIcon("icon.jpg"));

		label.setText("Kitty on your lap");
		label.setHorizontalAlignment(SwingConstants.RIGHT);
		label.setVerticalAlignment(SwingConstants.BOTTOM);
		getContentPane().add(label);
	}
}


このプログラムは、アイコンだけを設定しているラベルのインスタンスを生成し
その後、メソッドからテキストや位置情報を指定しています


状態とアイコン

コンポーネントは、有効/無効を表すプロパティを保有しています
Swing の無効状態のコンポーネントには、入力を行うことはできません
これを指定するには JComponent.setEnabled() メソッドを使い
状態を取得するには AWT の Component.isEnabled() メソッドを使います

Swing コンポーネントは JComponent が AWT の setEnabled() をオーバーライドしています
重量コンポーネントの違いとして、無効状態でも MouseEvent を受け取ってしまうことと
親が無効になっても、子コンポーネントは無効にはならないので注意が必要です

public void setEnabled(boolean enabled)

enabled には有効/無効状態を示す論理地を指定します
やはり、Swing も無効状態になると文字を灰色にするなど、見た目に変化を与えます
デフォルトでは、無効状態になるとアイコンと文字をグレーで表示します

しかし、Swing はこれで終わらず、無効状態のアイコンを指定できます
これは JLabel.setDisabledIcon() メソッドで指定できます
無効状態のアイコンを得るには JLabel.getDisabledIcon() を用います

public void setDisabledIcon(Icon disabledIcon)
public Icon getDisabledIcon()

disabledIcon には、無効状態のアイコンを指定します
getDisabledIcon は、無効状態アイコンが設定されておらず
かつ通常のアイコンが ImageIcon で設定されている場合は
アイコンの「グレー表示」バージョンを計算して、無効状態アイコンを返します
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test extends JApplet implements MouseListener , SwingConstants {
	JLabel label1;
	public void init() {
		label1 = new JLabel("Kitty on your lap" , CENTER);
		label1.setIcon(new ImageIcon("icon1.jpg"));
		label1.setDisabledIcon(new ImageIcon("icon2.jpg"));
		label1.addMouseListener(this);
		getContentPane().add(label1);
	}

	public void mouseClicked(MouseEvent e) {
		label1.setEnabled(!label1.isEnabled());
	}
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
}


上の図の、左は無効状態のラベル、右が有効状態のラベルです
このプログラムは、ラベルが無効状態になると自動的にアイコンが切り替わります



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