ここから本文です

プログラミング Java JLayeredPane JPanel JButton の表示についての質問です。

joh********さん

2011/12/619:50:34

プログラミング Java JLayeredPane JPanel JButton の表示についての質問です。

ボタンがうまく表示されません。
まず、ボタンが全く表示されず、ボタンの上をマウスが通過した時のみボタンが現れます。
そして、なぜか右上のチェックボタンのところに表示されます。(画像あり)

初心者で、どこが違うかも分からない常態なのでご教授お願いします。

(文字数が足りないため、関係ないと考えられる部分は略しています)
(ActionPeformanceは、今のところとりあえずthis.dispose();とNew MyClass();として、もう一度画面を開くようにしています。)

___以下略したソース___

〜略〜 MyClass extends JFrame 〜略〜

// 画面サイズ
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
DisplayMode displayMode = env.getDefaultScreenDevice().getDisplayMode();
width = displayMode.getWidth();
height = displayMode.getHeight();
this.setBounds(0, 0, width, height);

// JLayerdPane
JLayeredPane layered = new JLayeredPane();
layered.setLayout(null);
setContentPane(layered);

// 背景Panel
JPanel haikei = new BackImage(); //BackImageクラスは他に作成してます。
haikei.setBounds(0,0,width,height);

//右側ボタンPanel
JPanel A = new JPanel();
A.setBounds(width-280,0,280,height);
A.setLayout(null);

//右側ボタン
URL urlF = this.getClass().getResource("/ver1/CheckButton.png");
ImageIcon iconCheck = new ImageIcon(urlF);
JButton bCheck = new JButton(iconCheck);
bCheck.setBounds(10,50,250,250);
bCheck.addActionListener(this);
bCheck.setActionCommand("F");

URL urlG = this.getClass().getResource("/ver1/RetryButton.png");
ImageIcon iconRetry = new ImageIcon(urlG);
JButton bRetry = new JButton(iconRetry);
bRetry.setBounds(50,650,170,100);
bRetry.addActionListener(this);
bRetry.setActionCommand("G");

bCheck.setContentAreaFilled(false); //チェックボタンだけ透過
bCheck.setBorderPainted(false);

A.add(bCheck);
A.add(bRetry);

//左側のJPanelとJButtonも同じようにかいてます。(左側略)

//レイヤーの順序
layered.add(haikei);
layered.add(A);
layered.add(B); //左側パネル

layered.setLayer(haikei,-1);
layered.setLayer(A, 0);
layered.setLayer(B, 0);

//可視化
this.setVisible(true);

補足mzg_hrmさん

回答ありがとうございます。
おっしゃるとおりにやってみたのですが、変化なくおなじようになってしまいます。

layered.add,new ImageIcon,this.getClass,new JButton,getResource,doLayout,LayeredPane

閲覧数:
933
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

mzg********さん

編集あり2011/12/916:57:51

Aパネルの上にBパネルが載ってるからでは?
AとBを左右に配置するなら、もう一つCパネルを作って、C内でAとBを左右に配置して、CをLayeredPaneのhaikeiの上に載せる。

補足へのお返事
もしかして、JFrameの setVisible(true); の前に、doLayout(); を実行しないと配置計算されないから、表示されないって話の方?
window枠表示後に size変更をかけたりすると、内部コンポーネントの再配置が行われて、内部を表示するようになるけど、最初から表示させるには、doLayout();必須。

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる