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作为分层窗格的子项之一进行绘制,这将清除您绘制的内容。

一般来说,一个paintComponent()方法应该绘制到Graphics给它的那个,而不是绘制到其他组件的图形中。

于 2013-03-26T18:31:30.470 回答