- PR -

描画用パネルとそれ以外のパネルの両立

1
投稿者投稿内容
fuzuki
常連さん
会議室デビュー日: 2003/08/23
投稿数: 48
投稿日時: 2003-08-23 19:03
こんにちは。

Swingのアプレットを作成していて、上にボタンがあるパネル、下に描画用のパネルを配置したいのですが、ボタンのあるパネルを追加すると下にあるはずの描画用のパネルが表示されずに困っています。

ボタンのあるパネルをコンテナに追加せず、さらに描画用のパネルをコンテナに追加する際にSouthなどの位置指定をしなければ正常に描画されるのですが、そうでないとボタンだけしか表示されません。
例としては以下のような感じです。原因が分かる方いらっしゃいましたらよろしくお願いいたします。

--------------------------------------------------------------
import javax.swing.*;
import java.awt.*;

/* <APPLET CODE="Test.class" height=350 width=200></APPLET> */
public class Test extends JApplet
{
private JButton button = new JButton ("Button");
private JPanel bPanel = new JPanel();
private DrawPanel dPanel = new DrawPanel();

public void init()
{
Container c = getContentPane();
bPanel.add(button);

c.add(bPanel, "North"); // ここでaddせず、さらに
c.add(dPanel, "South"); // ここでSouthの指定をしないと円が描画される
}
private class DrawPanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.fillOval (50, 50, 100, 100);
}
}
}
--------------------------------------------------------------
syo
常連さん
会議室デビュー日: 2003/08/17
投稿数: 43
投稿日時: 2003-08-23 22:17
引用:

fuzukiさんの書き込み (2003-08-23 19:03) より:
Container c = getContentPane();
bPanel.add(button);

c.add(bPanel, "North"); // ここでaddせず、さらに
c.add(dPanel, "South"); // ここでSouthの指定をしないと円が描画される



こんばんは。

まずは、Containerに対するLayoutをセットしてください。
North/Southのような配置を行う場合は、BorderLayoutとなります。
この場合、Center以外の場所に関しては、
JPanel等のpreferredSizeを元に表示サイズが設定されるようですので、
その値をセットすると表示されるようになります。

#余談ですが、配置位置をセットする際、
 私の場合はBorderLayout.NORTHのように定数を利用しています。
fuzuki
常連さん
会議室デビュー日: 2003/08/23
投稿数: 48
投稿日時: 2003-08-24 01:10
syoさん、回答ありがとうございました。
setPreferredSizeでサイズを指定したところ、どちらも表示されました。

>私の場合はBorderLayout.NORTHのように定数を利用しています。

SunのJava2 APIのページでもそのように書かれていますね。私もこちらの
書き方に直しておきます。
とにかく、とても助かりました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)