Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将BuffereImage添加到JLayerPane上的JPanel_Java_Swing_Bufferedimage_Paintcomponent_Jlayeredpane - Fatal编程技术网

Java 将BuffereImage添加到JLayerPane上的JPanel

Java 将BuffereImage添加到JLayerPane上的JPanel,java,swing,bufferedimage,paintcomponent,jlayeredpane,Java,Swing,Bufferedimage,Paintcomponent,Jlayeredpane,因此,我有一个JLayeredPane(实际上是一个类子类JLayeredPane)。这是一个JPanel。我想向Jpanel添加一个BuffereImage public class BigMap extends JLayeredPane implements MouseListener JPanel mapPanel; BufferedImage theMap; public BigMap (BufferedImage m){ theMap = m; mapPan

因此,我有一个JLayeredPane(实际上是一个类子类JLayeredPane)。这是一个JPanel。我想向Jpanel添加一个BuffereImage

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
   }
问题是BuffereImage没有显示。JPanel是绝对存在的,因为我可以设置它的背景颜色,如果我愿意的话可以看到它。我意识到JLayeredPane没有布局管理器,必须为JPanel设置边界,但这对JPanel本身来说不应该是个问题,是吗?考虑到BuffereImage缺乏直接控制其大小的方法,如果是这样的话,我不知道该如何克服它


感谢您的帮助。

这里的问题是您重写分层窗格的
paintComponent()
方法,而不是
JPanel
JPanel
稍后将自己绘制,作为分层窗格的子窗格之一,这将擦除您绘制的内容


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

啊,我没有意识到这一点。回到教程,我想。非常感谢你,接受并投票通过。根据你的答案进行修改后,效果非常好。再次感谢。
mapPanel.getGraphics()
既然已经有了方法参数的
Graphics g
,为什么还要尝试获取另一个
Graphics
对象?无论如何,您检索的图形可能无效。一般来说,不要在组件上使用
getGraphics
。这仅仅是因为我最终会在JLayeredPane上有其他的JPanel,它们自己的图像会显示在屏幕上。这是一种保持整洁的尝试——每个面板的图形负责自己的内容。不良做法?专家组对其内容负责。错误做法否,但这是在代码调用
paint/paintComponent
之前为您完成的。您也不需要处理图形,Swing将在适当的时间提供适当的图形。只要不要在任何组件上调用
getGraphics
,您就应该没事了。