ラベル
テキスト表現
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) {}
}
上の図の、左は無効状態のラベル、右が有効状態のラベルです
このプログラムは、ラベルが無効状態になると自動的にアイコンが切り替わります