JFrame到图像而不显示JFrame

我试图将JFrame渲染到图像而不显示JFrame本身(类似于这个问题所要求的)。 我试过使用这段代码:

private static BufferedImage getScreenShot(Component component) { BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB); // call the Component's paint method, using // the Graphics object of the image. component.paint(image.getGraphics()); return image; } 

但是,这仅在设置JFramesetVisible(true) 。 这将导致图像显示在屏幕上,这不是我想要的。 我也尝试过这样的东西:

 public class MyFrame extends JFrame { private BufferedImage bi; public MyFrame(String name, BufferedImage bi) { this.bi = bi; super(name); } @Override public void paint(Graphics g) { g.drawImage(this.bufferedImage, 0, 0, null); } } 

然而,这显示黑色图像(如上面的代码)。 我很确定我所追求的是可能的,问题是我无法真正找到。 我对自定义Swing组件的体验非常有限,因此任何信息都将受到赞赏。

谢谢。

这是一个应该做的技巧片段:

 Component c; // the component you would like to print to a BufferedImage JFrame frame = new JFrame(); frame.setBackground(Color.WHITE); frame.setUndecorated(true); frame.getContentPane().add(c); frame.pack(); BufferedImage bi = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D graphics = bi.createGraphics(); c.print(graphics); graphics.dispose(); frame.dispose(); 

这种方法可能会做到这一点:

 public BufferedImage getImage(Component c) { BufferedImage bi = null; try { bi = new BufferedImage(c.getWidth(),c.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2d =bi.createGraphics(); c.print(g2d); g2d.dispose(); } catch (Exception e) { e.printStackTrace(); return null; } return bi; } 

然后你会做类似的事情:

 JFrame frame=...; ... BufferedImage bImg=new ClassName().getImage(frame); //bImg is now a screen shot of your frame