在JLayerPane上向JPanel添加BufferedImage

时间:2013-03-26 18:26:56

标签: java swing bufferedimage paintcomponent jlayeredpane

所以,我有一个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缺乏直接控制其大小的方法,我不知道如果它是如何克服它的。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

此处的问题是您覆盖了分层窗格的paintComponent()方法,而不是JPanelJPanel稍后将作为分层窗格的子项之一绘制自己,这将消除您绘制的内容。

通常,paintComponent()方法应该绘制到赋予它的Graphics,而不是绘制到其他组件的图形中。