如何从java中的非轻量级组件获取BufferedImage?

时间:2010-10-05 16:35:04

标签: java components bufferedimage

我使用以下方法尝试从非轻量级组件获取BufferedImage,但是我得到了一个黑色图像,所以它不起作用,我传递给它的组件是来自JDIC的WebBrowser对象,它是非重量轻:

  public static BufferedImage getComponentImage(Component aComponent,Rectangle region) throws IOException
  {
     BufferedImage image= new BufferedImage(aComponent.getWidth(),aComponent.getHeight(),BufferedImage.TYPE_INT_RGB);
     Graphics2D g2d=image.createGraphics();
     SwingUtilities.paintComponent(g2d,aComponent,aComponent.getParent(),region);
     g2d.dispose();
/*
     Graphics g = image.getGraphics();
     aComponent.paint(g);
  // aComponent.paintAll(g);
  // SwingUtilities.paintComponent(g,aComponent,aComponent.getParent(),region);
     g.dispose();
*/
     return image;
  }

我也在评论中尝试了这些行,它们也没有用,所以如何从java中的非轻量级组件中捕获BufferedImage?

1 个答案:

答案 0 :(得分:0)

SwingUtilities.paintComponent的文档说“如果组件不是轻量级的,那么就会发生错误的地图:崩溃,异常,绘画问题......”所以你的结果并不出乎意料。

CellRenderPane似乎没有这样的限制:你可以试试。或者,您可以尝试直接在组件上调用paint(),但这通常会产生问题,除非组件正确嵌入到组件层次结构中。