如何在画布上绘制JPanel?

时间:2009-12-30 12:14:40

标签: java graphics jpanel

是否有可能在特定位置上绘制JPanel作为Graphics(或Graphics2D)对象? 我覆盖了画布的paint方法,并在那里调用了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。

2 个答案:

答案 0 :(得分:1)

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

关于Swing paintComponent的一个好处是,Graphics传递的实际上总是Graphics2D,所以你可以:

Graphics2D g = (Graphics2D)lg;

现在,您可以使用getTransform保存旧转换,然后使用Graphics2DsetTranformscale修改translate的转换和rotate方法。不要忘记恢复旧的转换,否则你可能会捏造那个上下文所绘制的下一个东西。

答案 1 :(得分:0)

我会投入其中,根据具体情况,绘制到BufferedImage可能是合适的。您可以使用BufferedImage.getGraphics()获取Graphics上下文。然后你可以通过任何适合你的方式绘制BufferedImage的上下文。