I was just digging around through an old Java/Swing application and found this method that takes a snapshot of the current screen, and returns that screen shot as an BufferedImage, so I thought I would share it here. I left a comment in the code where I used to create an ImageIcon from the BufferedImage, but in the end the code is a little more flexible when I return the BufferedImage:
/*
* Take a snapshot of the screen using the Java Robot class.
* Return the screen shot as an Image (BufferedImage).
*
*/
public BufferedImage getBackgroundImage()
{
try {
Robot rbt = new Robot();
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension dim = tk.getScreenSize();
BufferedImage background = rbt.createScreenCapture(new Rectangle(0, yOffset - 1, (int) dim.getWidth(), (int) dim.getHeight()));
return background;
//return new ImageIcon(background);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
For what it's worth, I actually take this screenshot when my application isn't visible. I would hide my main JFrame, take this picture of the screen, and then re-display my JFrame. That doesn't really matter -- the Robot class doesn't care much what's displayed on your screen -- but I thought I'd mention it.
One other note: Looking at that method, it would be even better if I return the screen shot as an Image instead of a BufferedImage, but I pretty much just use BufferedImage's, so I'll leave it at that for now.

