我使用以下方法尝试从非轻量级组件获取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?
答案 0 :(得分:0)
SwingUtilities.paintComponent的文档说“如果组件不是轻量级的,那么就会发生错误的地图:崩溃,异常,绘画问题......”所以你的结果并不出乎意料。
CellRenderPane似乎没有这样的限制:你可以试试。或者,您可以尝试直接在组件上调用paint(),但这通常会产生问题,除非组件正确嵌入到组件层次结构中。