You can use ScreenImage to create an image from a component using the createImage
method. In summary, here is what it does under the hood (using a JLabel):
public static void main(String args[]) throws AWTException, IOException {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("test");
JLabel text = new JLabel("text");
frame.add(text);
frame.setPreferredSize(new Dimension(100, 100));
frame.pack();
frame.setVisible(true);
BufferedImage img = getImage(text);
try {
ImageIO.write(img, "png", new File("C:/temp/img.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
private static BufferedImage getImage(JComponent c) {
Rectangle region = c.getBounds();
BufferedImage image = new BufferedImage(region.width, region.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
g2d.translate(-region.x, -region.y);
g2d.setColor(c.getBackground() );
g2d.fillRect(region.x, region.y, region.width, region.height);
c.paint(g2d);
g2d.dispose();
return image;
}