Java 如何在画布上绘制JPanel?

Java 如何在画布上绘制JPanel?,java,graphics,jpanel,Java,Graphics,Jpanel,是否有可能在图形(或Graphics2D)对象的特定位置绘制JPanel? 我重写了画布的绘制方法,并在其中调用panel.paint(g),但它没有按照我希望的方式工作 @Override public void paint(Graphics g){ Dimension size = panel.getPreferredSize(); panel.setBounds(pos.x, pos.y, size.width, size.height); panel.paint(g); }

是否有可能在图形(或Graphics2D)对象的特定位置绘制JPanel? 我重写了画布的绘制方法,并在其中调用panel.paint(g),但它没有按照我希望的方式工作

@Override
public void paint(Graphics g){
  Dimension size = panel.getPreferredSize();
  panel.setBounds(pos.x, pos.y, size.width, size.height);
  panel.paint(g);
}

大小对象的定义如我所愿是正确的,所以这不是问题所在。此外,pos在屏幕上包含正确的x和y。

您可能应该使用
paintComponent
而不是
paint
,因为后者是AWT方法,前者是Swing方法

Swing的
paintComponent
的一个优点是,传递的
Graphics
实际上总是一个
Graphics2D
,因此您可以:

Graphics2D g = (Graphics2D)lg;

现在,您可以使用
getTransform
保存旧的转换,然后使用
setTransform
scale
translate
rotate
方法修改
图形2d
的转换。别忘了恢复旧的转换,否则你很可能会伪造下一个由该上下文绘制的东西。

我会加上这一点,根据具体情况,绘制到BuffereImage可能是合适的。可以使用BuffereImage.getGraphics()获取图形上下文。然后,您可以通过任何适合您的方式绘制BuffereImage的上下文

我可以将面板转换为BuffereImage吗?或者这里缺少什么链接?可能是createImage(int-width,int-height)?但在我的例子中,它返回null。我用paintComponent替换了paint,并使用转换将面板移动到另一个位置。但是什么都不画。。。