WisdomSoft - for your serial experiences.

6.1 ラベル

ラベルはテキストやアイコンを表示するだけの単純なコンポーネントです。

6.1.1 文字表示コンポーネント

ラベルは、1 行の簡易文字列を表示するための基本的なコンポーネントです。コンテナにコンポーネントの範囲内でテキストを表示するために利用されるもので、キーボードの入力などは受けません。Swing のラベルオブジェクトは javax.swing.JLabel クラスで実装されています。

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

JLabel クラスは Icon インタフェースを参照してアイコンを表示することもできるため、アイコンとテキストを同時に表示すれば、より直観的でユーザーに優しいユーザーインタフェースを実現することができます。

表1 JLabel クラスのコンストラクタとメソッド(抜粋)
コンストラクタ 解説
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) 指定されたテキスト、イメージ、および水平方向の配置方法でラベルを作成する。
メソッド
public void setIcon(Icon icon) このコンポーネントが表示するアイコンを設定する。
public Icon getIcon() ラベルに表示するアイコンを返す。
public void setText(String text) このコンポーネントが表示する 1 行のテキストを設定する。
public String getText() ラベルが表示するテキスト文字列を返す。
public void setDisabledIcon(Icon disabledIcon) 無効にされている場合に表示されるアイコンを設定する。
public Icon getDisabledIcon() 無効状態に表示するアイコンを返す。
public void setIconTextGap(int iconTextGap) アイコンとテキストの距離を設定する。
public int getIconTextGap() このラベルに表示されているアイコンとテキストの距離を返す。
public void setVerticalAlignment(int alignment) ラベルの内容の Y 軸に沿った配置方法を設定する。
public int getVerticalAlignment() ラベルの内容の Y 軸に沿った配置方法を返す。
public void setHorizontalAlignment(int alignment) ラベルの内容の X 軸に沿った配置方法を設定する。
public int getHorizontalAlignment() ラベルの内容の X 軸に沿った配置方法を返す。
public void setVerticalTextPosition(int textPosition) テキストのイメージに対する垂直位置を設定する。
public int getVerticalTextPosition() テキストのイメージに対する垂直位置を返す。
public void setHorizontalTextPosition(int textPosition) テキストのイメージに対する水平位置を設定する。
public int getHorizontalTextPosition() テキストのイメージに対する水平位置を返す。

表1は JLabel クラスのコンストラクタとテキストやアイコンの制御を行うための代表的なメソッドです。ラベルの基本はコンストラクタからも設定することができる、表示するテキストとアイコンです。デフォルトで、アイコンはテキストの左側に表示されますが、テキストもアイコンも null を指定することができるため、どちらか一方を表示、または何も表示しないラベルを作ることも可能です。アイコンは setIcon() メソッド及び getIcon() メソッドで、テキストは setText() メソッド及び getText() メソッドを使って設定・取得できます。

コード1
import javax.swing.*;

public class Test {
	public static void main(String args[]) {
		Icon icon = new ImageIcon("icon1.jpg");
		JLabel label = new JLabel();
		label.setText("Hello Kitty");
		label.setIcon(icon);

		JFrame win = new JFrame();
		win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		win.setBounds(10 , 10 , 400 , 300);
		win.getContentPane().add(label);
		win.show();
	}
}
実行結果
コード1 実行結果

コード1は、アイコンとテキストを設定したラベルコンポーネントを表示するプログラムです。ラベルはデフォルトでコンポーネントの垂直に中央、水平に左側にアイコンとテキストを配置します。テキストはアイコンに隣接し、アイコンに対して垂直に中央の位置に配置されています。

6.1.2 ラベルコンテンツの位置

JLabel クラスは SwingConstants インタフェースを実装しています。SwingConstants インタフェースは、画面上で何らかの配置および方向指定を行うために使用する定数を提供しています。このインタフェースは定数が定義されているだけで、メソッドは何も宣言されていません。JLabel はこのインタフェースを実装することで、このインタフェースを利用してラベルの位置を設定することをアピールしています。

ラベルが表示するアイコンやテキストの垂直位置は setVerticalAlignment() メソッドで、水平位置は setHorizontalAlignment() メソッドで設定することができます。垂直位置には SwingConstants インタフェースの TOP、CENTER、BOTTOM 定数のいずれかを、水平位置には LEFT、CENTER、RIGHT、LEADING、TRAILING 定数のいずれかを指定できます。水平位置に関しては、コンストラクタの horizontalAlignment 引数から指定して初期化することも可能です。

コード2
import javax.swing.*;

public class Test {
	public static void main(String args[]) {
		Icon icon = new ImageIcon("icon1.jpg");
		JLabel label = new JLabel("Hello Kitty" , icon , JLabel.RIGHT);
		label.setVerticalAlignment(JLabel.BOTTOM);

		JFrame win = new JFrame();
		win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		win.setBounds(10 , 10 , 400 , 300);
		win.getContentPane().add(label);
		win.show();
	}
}
実行結果
コード2 実行結果

コード2はラベルの内容をコンポーネントの右下に配置するように指定したプログラムです。水平位置はコンストラクタで初期化すると同時に指定し、垂直位置は setVerticalAlignment() メソッドを使って設定しています。

6.1.3 アイコンとテキストの位置関係

setVerticalTextPosition() メソッド setHorizontalTextPosition() メソッドを使ってアイコンのイメージとテキストの位置をより具体的に設定することができます。デフォルトではアイコンの右側中央にテキストが表示されていますが、テキストを左側に表示したかったり、アイコンの上部に合わせたい場合などはこれらのメソッドで設定します。位置を指定する値は setVerticalAlignment() メソッド及び setHorizontalAlignment() メソッドと同じです。

コード3
import javax.swing.*;

public class Test {
	public static void main(String args[]) {
		Icon icon = new ImageIcon("icon1.jpg");
		JLabel label = new JLabel("Hello Kitty" , icon , JLabel.CENTER);
		label.setVerticalTextPosition(JLabel.BOTTOM);
		label.setHorizontalTextPosition(JLabel.LEFT);

		JFrame win = new JFrame();
		win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		win.setBounds(10 , 10 , 400 , 300);
		win.getContentPane().add(label);
		win.show();
	}
}
実行結果
コード3 実行結果

コード3は、デフォルトのラベルとは逆にテキストが左側に、アイコンが右側に配置されています。これは setHorizontaltextPosition() メソッドの効果です。また、テキストの垂直位置もイメージに対して中央ではなく、イメージの下部に合わされています。これは setVerticalTextPosition() メソッドの効果です。

さらに、setIconTextGap() メソッドからアイコンとテキストの距離を指定することもできます。レイアウトの事情などからアイコンとテキストの間にある程度幅を開けたければ、このメソッドからピクセル単位で幅を指定します。デフォルトでは 4 ピクセルに設定されています。

6.1.4 無効状態のアイコン

コンポーネントは、デフォルトではユーザーの入力が可能な有効状態として表示されますが、入力を行うことができない状態であることをユーザーにアピールするための無効状態に移行することができます。これは Component クラスの setEnabled() メソッドで設定し isEnabled() メソッドから現在の状態を取得することができます。

Component クラス setEnabled() メソッド
public void setEnabled(boolean enabled)
Component クラス isEnabled() メソッド
public boolean isEnabled()

setEnabled() メソッドから false を設定するとコンポーネントは無効状態になります。Swing のコンポーネントは無効状態と有効状態を区別するためにテキストをグレー表示するなど、コンポーネントの内容の見た目が変化します。

JLabel クラスでは setDisabledIcon() メソッドから、あらかじめ無効状態のアイコンを設定しておくことができます。これを指定すれば、無効状態になったときにアイコンを手動で入れ替えるような処理を描かなくてすむのです。

コード4
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Test {
	public static void main(String args[]) {
		JLabel label = new JLabel("Hello Kitty");
		label.setIcon(new ImageIcon("icon2.jpg"));
		label.setDisabledIcon(new ImageIcon("icon3.jpg"));
		label.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				Component comp = e.getComponent();
				comp.setEnabled(!comp.isEnabled());
			}
		});

		JFrame win = new JFrame();
		win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		win.setBounds(10 , 10 , 400 , 300);
		win.getContentPane().add(label);
		win.show();
	}
}
実行結果
コード4 実行結果

コード4は、有効状態と無効状態とで異なるアイコンを表示するラベルコンポーネントを実現しています。有効/無効の切り替えはラベルをクリックすると発生します。ラベルには mouseClicked() メソッドをオーバーライドしたマウスアダプタを追加してクリックを処理しています。