- PR -

パネル表示の疑問と質問

1
投稿者投稿内容
ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 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/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-10-02 15:40
ソースコードが提供されていないので明確な解答を与えることはできません。


  • 使用するレイアウトマネージャは何?
  • パネルの表示はボタン押下時に動的に作成するの、それとも単にsetVisible()で表示させるだけ?
  • もし後者なら、どのような順番でフレームにパネルを追加したの?(単に追加した順番なだけではないの?)

# 情報少なすぎ
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-10-02 15:47
java.awt.CardLayoutを使ってください。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/awt/CardLayout.html
ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 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/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-10-02 16:17
レイアウトマネージャをキャンセルしていることが問題ありそうです。
Wataさんの言うように、CardLayoutを指定すべきでしょう。

# 追加
基本的にレイアウトマネージャを切らないほうがよいと思います。
代わりに、なにもしないレイアウトマネージャを登録するようにした方が良いでしょう。

コード:

c.setLayout(new java.awt.LayoutManager() {
// なにもしないように実装
});




[ メッセージ編集済み 編集者: かずくん 編集日時 2003-10-02 16:44 ]

[ メッセージ編集済み 編集者: かずくん 編集日時 2003-10-02 16:49 ]
ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 2003-10-02 18:01
Wata様、かずくん様お答えありがとうございました。

教えていただいた"CardLayout"について調べてみたのですがイマイチ使用の仕方がわかりません。
よろしければ、私が載せたロジックのどこをどのように直せばよいのかを教えていただけませんでしょうか?
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-10-03 00:18
検索サイトでCardLayoutをキーワードにして検索すれば、使用例がボロボロ出てくるでしょう。
1

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