- ベストアンサー
Javaのレイアウトマネージャについてです
ある課題で、この図のようなレイアウトになければいけないとの指定があるのでやってるんですがhttp://www.dotup.org/uploda/www.dotup.org3826.jpg.html 選択演算子の下のラベル(選択した演算子を表示するもの)がうまくレイアウトできません。ここまでは何とかたどり着いたんですが・・ http://www.dotup.org/uploda/www.dotup.org3828.jpg.html 自分が作ったソースはこちらです。 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活用編」です。 よろしくお願いします。
- みんなの回答 (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);
その他の回答 (2)
- natsukagur
- ベストアンサー率71% (5/7)
配置的にみて、GridBagLayoutをつかってるようにみえるのですが。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/GridBagLayout.html
お礼
こういうものもあるんですね、わざわざリンクもつけて頂きましてありがとうございます。 プログラムは完成しましたが、GridBagLayoutは使いませんでした。習っていませんので。 回答ありがとうございました。
- askaaska
- ベストアンサー率35% (1455/4149)
レイアウトを考えるときは補助線を引こう。 レイアウトのネストをすればいい というのは理解しているみたいね。 HINTは 縦に6つ均等 これでだいぶ変わるはずよ。
お礼
何とかできました。回答ありがとうございました。
お礼
回答ありがとうございます。 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); どこをどう変えるとうまくいきますでしょうか。 また、コンテナのレイアウトマネージャーを無効するべきでは?とのことですが、 それをするとパネルが表示されなくなってしまいます。。 これもやり方が間違っているのでしょうか。 何度も質問してしまい申し訳ないですが、またよろしければ回答をお願いします。