パネルの背景色の設定と背景の透明/非透明の切り替え
パネルは背景色を設定することができます。またパネルの背景は透明と非透明を切り替えることができます。ここではパネルの背景色の設定方法、および背景の透明/非透明の切り替え方法について解説します。
(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
背景色を設定する
パネルの背景色を設定するには JPanel クラスの親クラスである JComponent クラスで用意されている setBackground メソッドを使います。
public void setBackground(Color bg)
このコンポーネントのバックグラウンド・カラーを設定します。 バックグラウンド・カラーは、コンポーネントが不透明である場合にのみ、JComponentまたはComponentUIの実装のサブクラスによってのみ使用されます。 JComponentの直接のサブクラスは、このプロパティを受け付けるためにpaintComponentをオーバーライドする必要があります。
このプロパティが受け付けられるかどうかはルック・アンド・フィールしだいであり、無視されることもあります。
オーバーライド:
setBackground 、クラス: Component
パラメータ:
bg - 要求するバックグラウンドColor
引数には色を表す Color クラスのオブジェクトを指定して下さい。( Color クラスの使い方は「Colorクラス」を参照して下さい)。
実際の使い方は次のようになります。
JPanel panel = new JPanel(); panel.setBackground(Color.GREEN);
なお JPanel では背景はデフォルトで非透明となっていますので、背景色を設定するだけで反映されます。
サンプルプログラム
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample2_1.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import java.awt.Container; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Dimension; 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); setLayout(new FlowLayout()); JPanel panel1 = new JPanel(); panel1.setPreferredSize(new Dimension(200, 100)); panel1.setBackground(Color.RED); JButton button1 = new JButton("Open"); panel1.add(button1); JPanel panel2 = new JPanel(); panel2.setPreferredSize(new Dimension(200, 100)); panel2.setBackground(Color.BLUE); JButton button2 = new JButton("Close"); panel2.add(button2); Container contentPane = getContentPane(); contentPane.add(panel1); contentPane.add(panel2); } }
次のようにコンパイルを行います。
javac JSample2_1.java
コンパイルが終わりましたら実行します。
java JSample2_1
2 つのパネルを作成しそれぞれに背景色を設定したあとでフレームに追加しています。
背景の透明と非透明を切り替える
パネルの背景はデフォルトで非透明に設定されています。パネルの背景の透明/非透明の切り替えを行うには JPanel クラスの親クラスである JComponent クラスで用意されている setOpaque メソッドを使います。
public void setOpaque(boolean isOpaque)
trueの場合、コンポーネントはその境界内のすべてのピクセルをペイントします。 そうでない場合、コンポーネントはピクセルの一部または全部をペイントしないので、その下のピクセルが透けて表示されます。
JComponentに対するこのプロパティのデフォルト値は、falseです。 ただし、もっとも標準的なJComponentのサブクラス(JButtonおよびJTreeなど)に対するこのプロパティのデフォルト値は、ルック・アンド・フィールに依存します。
パラメータ:
isOpaque - このコンポーネントが不透明な場合はtrue
引数には透明にするかどうかを表す boolean 型の値を指定して下さい。 true を設定すると非透明になり、 false を設定すると透明になります。
実際の使い方は次のようになります。
JPanel panel = new JPanel(); panel.setOpaque(false);
サンプルプログラム
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample2_2.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import java.awt.Container; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Dimension; 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); setLayout(new FlowLayout()); JPanel panel1 = new JPanel(); panel1.setPreferredSize(new Dimension(200, 100)); panel1.setOpaque(true); JButton button1 = new JButton("Open"); panel1.add(button1); JPanel panel2 = new JPanel(); panel2.setPreferredSize(new Dimension(200, 100)); panel2.setOpaque(false); JButton button2 = new JButton("Close"); panel2.add(button2); Container contentPane = getContentPane(); contentPane.setBackground(Color.ORANGE); contentPane.add(panel1); contentPane.add(panel2); } }
次のようにコンパイルを行います。
javac JSample2_2.java
コンパイルが終わりましたら実行します。
java JSample2_2
今回はフレームに背景色としてオレンジを設定したあと、 2 つのパネルをフレームに追加しています。 1 つ目のパネルは背景を非透明に設定し 2 つ目のパネルは背景を透明に設定しています。
-- --
パネルの背景色の設定方法、および背景の透明/非透明の切り替え方法について解説しました。
( Written by Tatsuo Ikura )

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