ラベルの前景色/背景色の設定と背景の透明/非透明の切り替え
ラベルに文字列を表示する時、文字列の色である前景色と文字列の背景の色である背景色をそれぞれ個別に設定することができます。またラベルの背景は透明と非透明を切り替えることができます。ここではラベルの前景色/背景色の設定方法、および背景の透明/非透明の切り替え方法について解説します。
(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
前景色と背景色を設定する
ラベルの文字列の色である前景色を設定するには JLabel クラスの親クラスである JComponent クラスで用意されている setForeground メソッドを使います。
public void setForeground(Color fg)
このコンポーネントのフォアグラウンド・カラーを設定します。 このプロパティが受け付けられるかどうかはルック・アンド・フィールしだいであり、無視されることもあります。
オーバーライド:
setForeground 、クラス: Component
パラメータ:
fg - 要求するフォアグラウンドColor
引数には色を表す Color クラスのオブジェクトを指定して下さい。( Color クラスの使い方は「Colorクラス」を参照して下さい)。
実際の使い方は次のようになります。
JLabel label = new JLabel("MyLabel"); label.setForeground(Color.RED);
ラベルの背景色を設定するには JLabel クラスの親クラスである JComponent クラスで用意されている setBackground メソッドを使います。
public void setBackground(Color bg)
このコンポーネントのバックグラウンド・カラーを設定します。 バックグラウンド・カラーは、コンポーネントが不透明である場合にのみ、JComponentまたはComponentUIの実装のサブクラスによってのみ使用されます。 JComponentの直接のサブクラスは、このプロパティを受け付けるためにpaintComponentをオーバーライドする必要があります。
このプロパティが受け付けられるかどうかはルック・アンド・フィールしだいであり、無視されることもあります。
オーバーライド:
setBackground 、クラス: Component
パラメータ:
bg - 要求するバックグラウンドColor
引数には前景色と同じく色を表す Color クラスのオブジェクトを指定して下さい。
実際の使い方は次のようになります。
JLabel label = new JLabel("MyLabel"); label.setBackground(Color.GREEN);
ただしラベルの背景色はデフォルトで透明に設定されているので色を設定しても見た目には反映されません。この後で解説する透明/非透明の切り替えについてを参照されてください。
サンプルプログラム
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample2_1.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.Color; import java.awt.Container; import java.awt.BorderLayout; class JSample2_1 extends JFrame{ public static void main(String args[]){ JSample2_1 frame = new JSample2_1("MyTitle"); frame.setVisible(true); } JSample2_1(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label1 = new JLabel("Hello!"); label1.setForeground(Color.BLUE); JLabel label2 = new JLabel("Bye!"); label2.setForeground(Color.RED); JPanel p = new JPanel(); p.add(label1); p.add(label2); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } }
次のようにコンパイルを行います。
javac JSample2_1.java
コンパイルが終わりましたら実行します。
java JSample2_1
2 つのラベルが追加されました。 1 つ目のラベルは文字色が青色に設定され、 2 つ目のラベルは文字色が赤色に設定されてラベルが表示されました。
背景の透明と非透明を切り替える
ラベルはデフォルトの設定で背景が透明に設定されています。透明に設定されたままで背景色を設定しても画面上には変化がありませんので、背景色を表示したい場合には背景を非透明に設定して下さい。
ラベルの背景の透明/非透明の切り替えを行うには JLabel クラスの親クラスである JComponent クラスで用意されている setOpaque メソッドを使います。
public void setOpaque(boolean isOpaque)
trueの場合、コンポーネントはその境界内のすべてのピクセルをペイントします。 そうでない場合、コンポーネントはピクセルの一部または全部をペイントしないので、その下のピクセルが透けて表示されます。
JComponentに対するこのプロパティのデフォルト値は、falseです。 ただし、もっとも標準的なJComponentのサブクラス(JButtonおよびJTreeなど)に対するこのプロパティのデフォルト値は、ルック・アンド・フィールに依存します。
パラメータ:
isOpaque - このコンポーネントが不透明な場合はtrue
引数には透明にするかどうかを表す boolean 型の値を指定して下さい。 true を設定すると非透明になり、 false を設定すると透明になります。
実際の使い方は次のようになります。
JLabel label = new JLabel("MyLabel"); label.setOpaque(true); label.setBackground(Color.GREEN);
サンプルプログラム
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample2_2.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import java.awt.Color; import java.awt.Container; import java.awt.BorderLayout; class JSample2_2 extends JFrame{ public static void main(String args[]){ JSample2_2 frame = new JSample2_2("MyTitle"); frame.setVisible(true); } JSample2_2(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label1 = new JLabel("Hello!"); label1.setOpaque(true); label1.setBackground(Color.GREEN); JLabel label2 = new JLabel("Bye!"); label2.setOpaque(false); label2.setBackground(Color.GREEN); JPanel p = new JPanel(); p.add(label1); p.add(label2); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); } }
次のようにコンパイルを行います。
javac JSample2_2.java
コンパイルが終わりましたら実行します。
java JSample2_2
2 つのラベルが追加されました。 どちらも背景色を緑色に設定しています。 1 つ目のラベルは背景が非透明に設定されているので背景色が反映されていますが、 2 つ目のラベルは背景が透明に設定されているので背景色は反映されていません。
-- --
ラベルの前景色/背景色の設定方法、および背景の透明/非透明の切り替え方法について解説しました。
( Written by Tatsuo Ikura )

著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。