Smooth move using double buffer : Buffer Paint « 2D Graphics GUI « Java






Smooth move using double buffer

Smooth move using double buffer

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class SmoothMove extends JPanel implements MouseMotionListener {

  private int mX, mY;

  private Image mImage;


  public static void main(String[] args) {
    JFrame f = new JFrame();
    f.getContentPane().add(new SmoothMove());
    f.setSize(200, 200);
    f.show();
  }
  public SmoothMove() {
    addMouseMotionListener(this);
    setVisible(true);
  }

  public void mouseMoved(MouseEvent me) {
    mX = (int) me.getPoint().getX();
    mY = (int) me.getPoint().getY();
    repaint();
  }

  public void mouseDragged(MouseEvent me) {
    mouseMoved(me);
  }

  public void update(Graphics g) {
    paint(g);
  }

  public void paint(Graphics g) {
    // Clear the offscreen image.
    Dimension d = getSize();
    checkOffscreenImage();
    Graphics offG = mImage.getGraphics();
    offG.setColor(getBackground());
    offG.fillRect(0, 0, d.width, d.height);
    // Draw into the offscreen image.
    paintOffscreen(mImage.getGraphics());
    // Put the offscreen image on the screen.
    g.drawImage(mImage, 0, 0, null);
  }

  private void checkOffscreenImage() {
    Dimension d = getSize();
    if (mImage == null || mImage.getWidth(null) != d.width
        || mImage.getHeight(null) != d.height) {
      mImage = createImage(d.width, d.height);
    }
  }

  public void paintOffscreen(Graphics g) {
    int s = 100;
    g.setColor(Color.blue);
    g.fillRect(mX - s / 2, mY - s / 2, s, s);
  }
}

           
       








Related examples in the same category

1.Demos of a custom buffered image operationDemos of a custom buffered image operation
2.Buffered draw without flickerBuffered draw without flicker
3.Image offline renderingImage offline rendering
4.Data Buffer Grabber
5.Composite BufferedImage
6.RepaintManager.currentManager(null).setDoubleBufferingEnabled(false)
7.repaint just the affected part of the component
8.Create a multiple buffer strategy with the number of buffers given