2

したがって、私はJLayeredPane(技術的にはJLayeredPaneをサブクラス化するクラス)を持っています。その上にJPanelがあります。JpanelにBufferedImageを追加したい。

public class BigMap extends JLayeredPane implements MouseListener
  JPanel mapPanel;
  BufferedImage theMap;
  public BigMap (BufferedImage m){
    theMap = m;
    mapPanel = new JPanel();
    add(mapPanel, 0);
    mapPanel.setBounds(0, 0, 640, 640);
    //other unimportant stuff
    }

  @Overrride
  public void paintComponent (Graphics g){
    super.paintComponent(g);
    Graphics2D gmap = (Graphics2D) mapPanel.getGraphics();
    gmap.drawImage(theMap, null, 0, 0);
    //some other stuff which is working just fine
   }

問題は、BufferedImageが表示されないことです。JPanelは、backgroundColourを設定して、必要に応じて表示できるため、間違いなく存在します。JLayeredPaneにはレイアウトマネージャーがなく、JPanelの境界を設定する必要があったことはわかっていますが、それはJPanel自体の問題ではないはずです。また、BufferedImageにはサイズを直接制御するメソッドがないため、それを克服する方法がわかりません。

助けていただければ幸いです。

4

1 に答える 1

2

ここでの問題はpaintComponent()、ではなく、レイヤードペインのメソッドをオーバーライドすることですJPanel。はJPanel、レイヤードペインの子の1つとして、後で自分自身をペイントします。これにより、ペイントしたものが消去されます。

一般に、paintComponent()メソッドはGraphics、他のコンポーネントのグラフィックスではなく、与えられたものにペイントする必要があります。

于 2013-03-26T18:31:30.470 に答える