ここから本文です

java プログラミング 初心者です。 JPanelを継承した二つの「Panel2」「Panel3」...

tpd********さん

2016/11/314:02:16

java プログラミング 初心者です。
JPanelを継承した二つの「Panel2」「Panel3」というクラスを作成し、
それぞれのクラスのオブジェクト「p2」「p3」を用意しています。

この「p2」で表示を行っているグラフィックスの上に「p3」のグラフィックスを重ねたいと思っています。
そのため、「p2.add(p3)」と記述し、「p2」に「p3」を追加してみたのですが、「p3」の表示がとても小さい■のような表示になってしまいます。(おそらく表示自体は行われている?)

パネルにパネルを貼り付け、綺麗にグラフィックスを重ね合わせるようにするにはどうしたらよいのでしょうか。

(これらのパネルはJFrameを継承したクラスでコンテンツに追加を行っています。)

-----{Frameクラス}---------------------------------------------------

Panel2 p2 = new Panel2();
Panel3 p3 = new Panel3();

p2.add(p3);
contantpane.add(p2,BorderLayout.CENTER);

frame.setVisible(true);
--------------------------------------------------------------------------


--------{Panel2}-------------------------------------------------------
public class Panel2 extends JPanel{

ImageIcon imgIcon;
Image img;
int imageWidth;
int imageHeight;

Panel2(){
imgIcon = new ImageIcon("C:\\Users\\Kousei\\learn JFrame\\pictures\\keybord.png");
img = imgIcon.getImage();
super.setOpaque(false);
super.setBackground(Color.BLACK);

}

public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2D = (Graphics2D)g;
imageWidth = img.getWidth(this);
imageHeight = img.getHeight(this);
g2D.drawImage(img, 0, 0, imageWidth, imageHeight, this);
System.out.println("ComponentDo");

}
}
-----------------------------------------------------------------------


-------{Panel3}-----------------------------------------------------
public class Panel3 extends JPanel{

Panel3(){
//super.setOpaque(false);
super.setBackground(Color.BLACK);
}

public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
System.out.println("Component2Do");
g.fillRect(75, 0, 25, 500);
}
}

-----------------------------------------------------------------------

super.setOpaque,Color.Black,Graphics2D g2D,Graphics g,Panel3 p3,setLocation,コンストラクタ内

閲覧数:
53
回答数:
1

違反報告

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

etxicoenpさん

2016/11/314:11:10

p2 のレイアウトマネージャーによって自動調整されているのではないでしょうか?

p2 の コンストラクタ内に、setLayout(null); と入れてレイアウトマネージャーを無効化し、p3 のコンストラクタ内で setLocation や setSize, setBounds などを使って位置と大きさを指定すれば大きくなると思います。

ただ、重ね合わせるのなら p3 ではなく BufferedImage を使用して、それを p2 に貼り付ける形式をお勧めします。

質問した人からのコメント

2016/11/3 15:43:37

BufferdImageを用いて貼り付けることができました!!
とても助かりました。ありがとうございます!

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

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

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

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

閉じる

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

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

閉じる