How do I get the image paint/paintComponent generates?

user20298 picture user20298 · Sep 22, 2008 · Viewed 9.6k times · Source

I have a quick question. How do I get the image generated by a JComponent.paint or paintComponent?

I have a JComponent which I use as a 'workspace' and where I have overwritten the paintComponent method to my own. The thing is that my workspace JComponent also has children which has their own paintComponent methods.

So when Swing renders my workspace component, it renders the workspace graphics and then its childrens'.

However, I want to get the image my workspace component generates (which includes the workspace graphics and the children's graphics).

How do I do that?

I tried to call the paintComponent/paint-method myself by using my own Graphics, but i just returned a black image. Here is what i tried;

public void paintComponent(Graphics g) {

    if (bufferedImage != null) {
        g.drawImage(bufferedImage, 0, 0, this);
    }
    else {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());
    }
}

public BufferedImage getImage() {

    BufferedImage hello = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics g = hello.getGraphics();
    paintComponent( g );

    return hello;
}

Any thoughts or comments are welcome! :)

Answer

Martijn picture Martijn · Sep 22, 2008

If you call getImage too early, your component will not have been displayed yet and will still have a 0 width and height. Have you made sure you're calling it at a sufficient late time? Try printing the component's size to stdout and see what its dimensions are.