因此,我有一个JLayeredPane(实际上是一个JLayeredPane子类)。这是一个JPanel。我想添加一个BufferedImage到Jpanel。向JLayerPane上的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肯定存在,因为我可以设置它的背景颜色,如果我愿意的话。我意识到JLayeredPane没有布局管理器,并且必须为JPanel设置界限,但是这对JPanel本身不应该是一个问题,当然?鉴于BufferedImage没有方法直接控制其大小,我不明白我是如何克服的,如果是。
任何帮助表示赞赏。
'mapPanel.getGraphics()'当你已经有方法参数的'Graphics g'时,你为什么试图获得另一个'Graphics'对象?无论如何,您检索的图形可能无效。一般来说,不要在组件上使用'getGraphics'。 – 2013-03-26 18:50:24
这只是因为我最终会在JLayeredPane上放置其他JPanel,并带有自己的图像。这是企图保持整洁 - 每个小组的图形负责其内容。不好的做法? – MrB 2013-03-26 19:05:09
_Panel负责自己的内容。不好的做法_不,但是这是在代码调用'paint/paintComponent'之前完成的。你应该永远不需要照顾图形,Swing会在适当的时候提供适当的图形。不要在任何组件上调用'getGraphics',你应该没问题。 – 2013-03-26 23:44:54