パネルのサイズの設定と枠線の表示
パネルのサイズは任意のサイズに設定することができます。またパネルには枠線を設定することもできます。ここではパネルのサイズを設定する方法、およびパネルに枠線を表示する方法について解説します。
(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
パネルのサイズを設定する
ラベルのサイズを設定するには JPanel クラスの親クラスである JComponent クラスで用意されている setPreferredSize メソッドを使います。
public void setPreferredSize(Dimension preferredSize)
このコンポーネントの適切なサイズを設定します。 preferredSizeがnullの場合、UIで適切なサイズを要求します。
オーバーライド:
setPreferredSize 、クラス: Component
パラメータ:
preferredSize - 新しい推奨サイズ、またはnull
引数にはサイズを表す Dimension クラスのオブジェクトを指定します。( Dimension クラスの詳細は「Dimensionクラス」を参照して下さい)。
実際の使い方は次のようになります。
JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(200, 100));
コンポーネントでサイズを設定する場合、使用しているレイアウトマネージャーによってはコンポーネントに設定したサイズは無視される場合がありますのでご注意ください。例えばレイアウトマネージャーとして BorderLayout を使用している場合はコンポーネントに設定されたサイズは無視されます。
サンプルプログラム
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample5_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 JSample5_1 extends JFrame{ public static void main(String args[]){ JSample5_1 frame = new JSample5_1("MyTitle"); frame.setVisible(true); } JSample5_1(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); JPanel panel1 = new JPanel(); panel1.setBackground(Color.BLUE); JButton button1 = new JButton("Open"); panel1.add(button1); JPanel panel2 = new JPanel(); panel2.setBackground(Color.RED); panel2.setPreferredSize(new Dimension(200, 200)); JButton button2 = new JButton("Close"); panel2.add(button2); Container contentPane = getContentPane(); contentPane.add(panel1); contentPane.add(panel2); } }
次のようにコンパイルを行います。
javac JSample5_1.java
コンパイルが終わりましたら実行します。
java JSample5_1
2 つのパネルを作成しそれぞれに背景色を設定したあとでフレームに追加しています。 1 つ目のパネルはサイズを設定を行わず、 2 つ目のパネルにはサイズを設定してあります。
パネルに枠線を表示する
パネルに枠線を設定するには JPanel クラスの親クラスである JComponent クラスで用意されている setBorder メソッドを使います。
public void setBorder(Border border)
このコンポーネントのボーダーを設定します。 Borderオブジェクトは、コンポーネントのイン・セットを定義し(コンポーネントで直接設定されているイン・セットをオーバーライドする)、任意でそれらのイン・セットの境界内のボーダー装飾をレンダリングします。 Swingコンポーネントで装飾領域および非装飾領域(マージンおよびパディングなど)の両方を生成するには、イン・セットではなくボーダーを使用する必要があります。 単一のコンポーネント内で複数のボーダーを入れ子にするには、複合ボーダーを使用できます。
技術的にはJComponentを継承するどのオブジェクトにもボーダーを設定できますが、標準のSwingコンポーネントのルック・アンド・フィールの実装の多くは、ユーザー設定のボーダーでは正しく動作しません。 通常、JPanelまたはJLabel以外の標準のSwingコンポーネントでボーダーを設定するときは、コンポーネントをJPanelに入れて、JPanelでボーダーを設定することをお勧めします。
これはバウンド・プロパティです。
パラメータ:
border - このコンポーネントでレンダリングされるボーダー
引数には枠線を表す Border インターフェースを実装したクラスのオブジェクトを指定します。( Border インターフェースの詳細は「Border」を参照して下さい)。
実際の使い方は次のようになります。
JPanel panel = new JPanel(); LineBorder border = new LineBorder(Color.RED, 2, true); panel.setBorder(border);
サンプルプログラム
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample5_2.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.border.LineBorder; import java.awt.Container; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Dimension; class JSample5_2 extends JFrame{ public static void main(String args[]){ JSample5_2 frame = new JSample5_2("MyTitle"); frame.setVisible(true); } JSample5_2(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); JPanel panel1 = new JPanel(); panel1.setBackground(Color.ORANGE); panel1.setPreferredSize(new Dimension(200, 200)); JButton button1 = new JButton("Open"); panel1.add(button1); JPanel panel2 = new JPanel(); panel2.setBackground(Color.ORANGE); panel2.setPreferredSize(new Dimension(200, 200)); LineBorder border = new LineBorder(Color.RED, 2, true); panel2.setBorder(border); JButton button2 = new JButton("Close"); panel2.add(button2); Container contentPane = getContentPane(); contentPane.add(panel1); contentPane.add(panel2); } }
次のようにコンパイルを行います。
javac JSample5_2.java
コンパイルが終わりましたら実行します。
java JSample5_2
2 つのパネルをフレームに追加していますが、 2 つ目のパネルには枠線を設定しています。
-- --
パネルのサイズを設定する方法、およびパネルに枠線を表示する方法について解説しました。
( Written by Tatsuo Ikura )

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