Hurricane Development
Hurricane Development

Reputation: 2464

Java JFrame Graphics Update

I am playing around with graphics in Java using JFrames and am trying to completely understand when Graphics changes actually occur.

Let's say I have a timer running every second, and every second the graphics change. The tick method, for example, will run every second...

public void tick(Graphics g) {
    g.fillRect(0,0,10,10);
    //Do Some Computations
    g.fillRect(0,0,someComputedWidth,someComputedHeight);
}

Are the graphics instantly updated on the computers display? When the first fillRect method is called, is that rectangle instantly created?

I want to be able to draw all my graphics, and then make them have their effect at the same exact time. I want the tick method to buffer all updates, and then execute them all at once. How do I accomplish this?

Upvotes: 2

Views: 781

Answers (1)

Suspended
Suspended

Reputation: 1190

To buffer your updates you can use BufferedImage:

@Override
public void paintComponent(Graphics g){
    BufferedImage image = new BufferedImage(this.size.width, this.size.height, BufferedImage.TYPE_INT_RGB);
    Graphics bgr = image.getGraphics(); 
    for(Tile t : this.tiles){
        t.draw(bgr);
    }   
    super(bgr);
    g.drawImage(image, 0, 0, null);
    bgr.dispose();      
    image = null;
}

I used this method in one of my school projects. It draws to an off-screen image and then draws the image to display.

With few drawable objects being drawn, and no, or little animation, updating directly to the display does not always have noticable effects, however with more complex tasks the image "flickers" and double buffering is a perfect cure for that.

Upvotes: 2

Related Questions