- - PR -
パネル表示の疑問と質問
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-10-02 15:19
メインフレームにボタンが三つあります、ボタンA、ボタンB、ボタンC。
ボタンAを押下するとパネル1が表示されます。 ボタンBを押下するとパネル2が表示されます。 ボタンCを押下するとパネル3が表示されます。 パネルは3つとも表示位置(0,0)に表示します。 そこで、 ボタンをA、B、Cの順番に押下した結果、3っつのパネルは重なっているわけですが重なり方が一番上にパネル1、次にパネル2、一番下にパネル3の順番なんです。 普通、表示した順番にパネル3が一番上、次にパネル2、一番下にパネル1となると考えたのですが・・・ 最後に表示したパネルを一番上に表示する事は可能でしょうか? [ メッセージ編集済み 編集者: ボム 編集日時 2003-10-02 15:23 ] | ||||
|
投稿日時: 2003-10-02 15:40
ソースコードが提供されていないので明確な解答を与えることはできません。
# 情報少なすぎ | ||||
|
投稿日時: 2003-10-02 15:47
java.awt.CardLayoutを使ってください。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/CardLayout.html | ||||
|
投稿日時: 2003-10-02 15:52
かずくん様ご意見、ご忠告ありがとうございました。
OS = Windows2000 開発Tool = JBuilder8 JDK = 1.4.1 下記がテストしてたソースです。 /************************************************************/ public class Frame_Main extends Frame { Button btn_1 = new Button(); Button btn_2 = new Button(); Button btn_3 = new Button(); Panel pnl_1; Panel pnl_2; Panel pnl_3; //フレームのビルド public Frame_Main() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //コンポーネントの初期化 private void jbInit() throws Exception { btn_1.setLabel("panel_1"); btn_1.setBounds(new Rectangle(10, 240, 44, 26)); btn_1.addActionListener(new Frame_Main_btn_1_actionAdapter(this)); btn_2.setLabel("panel_2"); btn_2.setBounds(new Rectangle(60, 241, 44, 26)); btn_2.addActionListener(new Frame_Main_btn_2_actionAdapter(this)); btn_3.setLabel("panel_3"); btn_3.setBounds(new Rectangle(110, 240, 44, 26)); btn_3.addActionListener(new Frame_Main_btn_3_actionAdapter(this)); this.setSize(new Dimension(236, 283)); this.setTitle("panel"); this.setLayout(null); this.setVisible(true); this.setLocation(0, 0); this.setResizable(false); this.add(btn_1, null); this.add(btn_3, null); this.add(btn_2, null); } //ウィンドウが閉じられたときに終了するようにオーバーライド protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } void btn_1_actionPerformed(ActionEvent e) { pnl_1 = new Panel(); this.add(pnl_1, null); pnl_1.setSize(new Dimension(50, 50)); pnl_1.setLayout(null); pnl_1.setLocation(10, 10); pnl_1.setBackground(Color.black); pnl_1.setVisible(true); } void btn_2_actionPerformed(ActionEvent e) { pnl_2 = new Panel(); this.add(pnl_2, null); pnl_2.setSize(new Dimension(60, 60)); pnl_2.setLayout(null); pnl_2.setLocation(10, 10); pnl_2.setBackground(Color.red); pnl_2.setVisible(true); } void btn_3_actionPerformed(ActionEvent e) { pnl_3 = new Panel(); this.add(pnl_3, null); pnl_3.setSize(new Dimension(70, 70)); pnl_3.setLayout(null); pnl_3.setLocation(10, 10); pnl_3.setBackground(Color.blue); pnl_3.setVisible(true); } } /************************************************************/ | ||||
|
投稿日時: 2003-10-02 16:17
レイアウトマネージャをキャンセルしていることが問題ありそうです。
Wataさんの言うように、CardLayoutを指定すべきでしょう。 # 追加 基本的にレイアウトマネージャを切らないほうがよいと思います。 代わりに、なにもしないレイアウトマネージャを登録するようにした方が良いでしょう。
[ メッセージ編集済み 編集者: かずくん 編集日時 2003-10-02 16:44 ] [ メッセージ編集済み 編集者: かずくん 編集日時 2003-10-02 16:49 ] | ||||
|
投稿日時: 2003-10-02 18:01
Wata様、かずくん様お答えありがとうございました。
教えていただいた"CardLayout"について調べてみたのですがイマイチ使用の仕方がわかりません。 よろしければ、私が載せたロジックのどこをどのように直せばよいのかを教えていただけませんでしょうか? | ||||
|
投稿日時: 2003-10-03 00:18
検索サイトでCardLayoutをキーワードにして検索すれば、使用例がボロボロ出てくるでしょう。
| ||||
1
