パネルを使う
パネルをネストする
複数の種類のコンポーネントを多数コンテナに配置する場合
先程のような単一のレイアウトでは限界があります
そこで、コンテナ上のレイアウトにコンポーネントを配置する別ののエリアを確保します
ここで使われるのがjava.awt.Panelクラスです
このクラスはContainerクラスを拡張していて、かつAppletクラスの親になります
コンストラクタは次の二つです
public Panel()
public Panel( LayoutManager layout )
layoutを指定した場合は、指定したレイアウトマネージャでパネルを表示します
デフォルトでFlowLayoutです
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="App40.class" width="300"height="300">
</applet>
*/
public class App40 extends Applet {
Panel pnl[] = new Panel[2];
public void init() {
setBackground(Color.white);
setLayout(new BorderLayout(2 , 1));
pnl[0] = new Panel(new GridLayout(1 , 3));
for (int i = 0 ; i < 3 ; i++) pnl[0].add(new Checkbox("check " + i));
pnl[1] = new Panel(new GridLayout(2 , 5));
for (int i = 0 ; i < 10 ; i++) pnl[1].add(new Button("Button " + i));
add(pnl[0] , BorderLayout.NORTH);
add(pnl[1] , BorderLayout.CENTER);
}
}
PanelクラスはContainerクラスを拡張しており
ContainerクラスはComponentクラスを拡張しています
add()メソッドでパラメータに指定できるのはComponentクラスなので
生成したPanelオブジェクトをネストできるのは、理論上問題ないと思います
上のプログラムでは、チェックボックスのパネルとボタンのパネルを分けています
それぞれのパネルをadd()でコンテナに追加することでレイアウトしているという仕組みです