プロが教えるわが家の防犯対策術!

ある課題で、この図のようなレイアウトになければいけないとの指定があるのでやってるんですがhttp://www.dotup.org/uploda/www.dotup.org3826.jp …

選択演算子の下のラベル(選択した演算子を表示するもの)がうまくレイアウトできません。ここまでは何とかたどり着いたんですが・・
http://www.dotup.org/uploda/www.dotup.org3828.jp …

自分が作ったソースはこちらです。
lb[0] = new JLabel("選択演算子");
lb[1] = new JLabel(" ");
lb[2] = new JLabel("0");
lb[3] = new JLabel("です");

lb[0].setHorizontalAlignment(JLabel.LEFT);
lb[0].setVerticalAlignment(JLabel.TOP);

lb[1].setFont(new Font("Helvetica",Font.BOLD,20));
lb[1].setBorder(new EtchedBorder());
lb[1].setHorizontalAlignment(JLabel.LEFT);
lb[1].setVerticalAlignment(JLabel.BOTTOM);

lb[2].setFont(new Font("Helvetica",Font.BOLD,20));
lb[2].setBorder(new EtchedBorder());
lb[2].setHorizontalAlignment(JLabel.CENTER);

lb[3].setHorizontalAlignment(JLabel.CENTER);

bt_en[0] = new JButton("+");
bt_en[1] = new JButton("-");
bt_en[2] = new JButton("=");
bt_en[3] = new JButton("C");
bt_en[4] = new JButton("AC");

cnt.setLayout(new GridLayout(3,1));

pn[0].setLayout(new BorderLayout());
pn[1].setLayout(new GridLayout(4,3));
pn[2].setLayout(new FlowLayout());

pn[0].add(lb[0],BorderLayout.WEST);
pn[0].add(lb[1],BorderLayout.SOUTH);
pn[0].add(lb[2],BorderLayout.CENTER);
pn[0].add(lb[3],BorderLayout.EAST);

どのようにすればいいのか教えていただきたいです。
ちなみに使っている教科書は「やさしいJava活用編」です。

よろしくお願いします。

A 回答 (3件)

どうしてもレイアウトマネジャーの使用が必須ならば


4つのLabelを1Panelで希望する配置は無理があります。
lb[0]とlb[1]で1Panelに上下配置
lb[2]とlb[3]で1Panelに左右配置(Panelが2つ必要)
必須でなければ、レイアウトマネジャーを無効にして
自由に指定した位置に配置するもがシンプルと思います。
pn[0].setLayout(null);
lb[0].setBounds(x,y,w,h);
lb[1].setBounds(x,y,w,h);
lb[2].setBounds(x,y,w,h);
lb[3].setBounds(x,y,w,h);

後、コンテナのレイアウトマネージャーを無効するべきでは?
(3つのパネルが縦三等分されるので)
cnt.setLayout(null);
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

setBounds() はまだ習っていないので使えません・・申し訳ないです。

lb[0]とlb[1]でpn[0]に配置、lb[2]とlb[3]でpn[1]に配置してみました。
すると、変なことになってしまいました。↓
http://www.dotup.org/uploda/www.dotup.org4275.jpg
私のやり方がおかしいんだと思いますが、うまくいきません。ソースはこれです。
cnt.setLayout(new GridLayout(3,1));

pn[0].setLayout(new BorderLayout());
pn[1].setLayout(new BorderLayout());
pn[2].setLayout(new GridLayout(4,3));
pn[3].setLayout(new FlowLayout());

pn[0].add(lb[0],BorderLayout.NORTH);
pn[0].add(lb[1],BorderLayout.SOUTH);
pn[1].add(lb[2],BorderLayout.CENTER);
pn[1].add(lb[3],BorderLayout.EAST);
どこをどう変えるとうまくいきますでしょうか。
また、コンテナのレイアウトマネージャーを無効するべきでは?とのことですが、
それをするとパネルが表示されなくなってしまいます。。
これもやり方が間違っているのでしょうか。

何度も質問してしまい申し訳ないですが、またよろしければ回答をお願いします。

お礼日時:2009/02/12 13:01

配置的にみて、GridBagLayoutをつかってるようにみえるのですが。



http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
    • good
    • 0
この回答へのお礼

こういうものもあるんですね、わざわざリンクもつけて頂きましてありがとうございます。
プログラムは完成しましたが、GridBagLayoutは使いませんでした。習っていませんので。

回答ありがとうございました。

お礼日時:2009/02/13 00:48

レイアウトを考えるときは補助線を引こう。



レイアウトのネストをすればいい
というのは理解しているみたいね。

HINTは
縦に6つ均等

これでだいぶ変わるはずよ。
    • good
    • 0
この回答へのお礼

何とかできました。回答ありがとうございました。

お礼日時:2009/02/13 00:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!