我使用以下方法尝试从非轻量级的组件获取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中非轻量级的Component捕获BufferedImage呢?

最佳答案

SwingUtilities.paintComponent的文档说:“如果该组件不是轻量级的,则会发生坏的事情:崩溃,异常,绘制问题...”,因此您的结果并不意外。

CellRenderPane似乎没有这种限制:您可以尝试一下。另外,您可以尝试直接在组件上调用paint(),但这通常会带来问题,除非该组件正确地嵌入在组件层次结构中。

07-24 20:23