9.1 パネル
9.1.1 汎用のコンテナ
これまでは Swing の軽量コンポーネントをトップレベルの重量コンテナが保有しているコンテンツペインに追加していました。しかし、より複雑で柔軟なコンポーネントの配置を希望する場合、レイアウトマネージャだけでは限界が生じるでしょう。特に、コンポーネントの数が多い場合は単一のレイアウトでは配置が困難です。
このような場合は、論理的関連性を持つコンポーネントを Swing の軽量コンテナに配置し、この軽量コンテナを他のコンテナと共に表示することでより複雑で柔軟なコンポーネントのレイアウトを実現することができます。
javax.swing.JPanel クラスは、Swing の軽量コンテナの中で最も汎用的なパネルコンテナを提供しています。パネルは、他のコンポーネントの親となる単純なコンテナとして利用したり、何らかの図やイメージを描画するキャンバスとして利用するなど、幅広く利用できます。
java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--javax.swing.JComponent | +--javax.swing.JPanel
public class JPanel extends JComponent implements Accessible
JPanel クラスは、特に重要な新しいサービスは提供していません。このクラスは単純なコンテナとして利用するか、継承して新しい機能を付加するなどの汎用的用途のために存在しています。
コンストラクタ | 解説 |
---|---|
public JPanel() | デフォルトの設定で JPanel を作成する。 |
public JPanel(boolean isDoubleBuffered) | 指定されたバッファリング方式で JPanel を作成する。 |
public JPanel(LayoutManager layout) | 指定されたレイアウトマネージャで JPanel を作成する。 |
public JPanel(LayoutManager layout, boolean isDoubleBuffered) | 指定されたレイアウトマネージャ、バッファリング方式で JPanel を作成する。 |
JPanel コンテナはデフォルトで FlowLayout のレイアウトマネージャを持ち、ダブルバッファが有効な状態で生成されますが、必要に応じて、コンストラクタやメソッドからこれらの値を設定することができます。
import java.awt.*; import javax.swing.*; public class Test extends JFrame { public static void main(String args[]) { JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(new GridLayout(2 , 2)); panel1.add(new JButton("Button1")); panel1.add(new JButton("Button2")); panel1.add(new JButton("Button3")); panel2.add(new JLabel("Label")); panel2.add(new JTextArea("TextArea")); panel2.add(new JList(new Object[] { "List" })); panel2.add(new JSlider()); JFrame win = new Test(); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); win.setBounds(10 , 10 , 400 , 300); win.getContentPane().add(panel1 , BorderLayout.NORTH); win.getContentPane().add(panel2 , BorderLayout.CENTER); win.show(); } }
コード1は、複数のレイアウトを混合したウィンドウを表示するために、パネルコンテナに個別のレイアウトごとのコンポーネントを追加し、このパネルコンテナをウィンドウのコンテンツペインに追加しています。このように、コンテナを階層化することで、複数のレイアウトを混合した複雑なコンポーネントの配置を実現することができるのです。