/** BufferTest * @author Tim Stefanini * @version 1.0 */ package SlidingBuffer; import java.awt.*; import java.applet.*; import java.util.Date; public class BufferTest extends java.applet.Applet{ Image offscreenImage=null; Graphics offscreenGraphics=null; public void init () { try { setupBuffer (); offscreenGraphics.setColor (Color.blue); drawGrid (); }//end try catch (Exception e)//reall bad { System.exit(1); }//end catch }//end init () private void setupBuffer () { try { //set up image for double buffering offscreenImage = createImage ( this.miBuffersize ,this.miBuffersize); offscreenGraphics = offscreenImage.getGraphics (); }//end try catch (Exception e) { e.printStackTrace (); }//end catch }//end setupBuffer() private void drawGrid () { int iXpos =0; int iYpos =0; offscreenGraphics.setFont(new Font("TimesRoman", Font.PLAIN,8)); for (int x=0; x <= 2000; x+= 150) for (int y=0; y<=2000; y+= 150) { iXpos = x + miBufferShiftX +25 ; iYpos = y + miBufferShiftY +25; offscreenGraphics.drawRect(iXpos, iYpos, 50, 50); offscreenGraphics.drawString(x+ "," +y, iXpos +5, iYpos +20); } }//end drawGrid () private void ClearBuffer () { offscreenGraphics.setColor (Color.white); //erase old draw offscreenGraphics.fillRect(0,0, miBuffersize, miBuffersize); offscreenGraphics.setColor (Color.blue); }//end ClearBuffer () private void SlideBuffer () { Date myd = new Date(); long start = myd.getTime(); // offscreenGraphics.setColor (Color.white); //erase old draw // drawGrid (); ClearBuffer (); miBufferShiftX += miXpan; miBufferShiftY += miYpan; miXpan = miYpan =0; mfDragInit = false; // offscreenGraphics.setColor (Color.blue); drawGrid (); repaint (); Date date2 = new Date(); long finish = date2.getTime(); System.out.println("slid buffer in " + (int)(finish - start) + "secs"); } public boolean mouseUp(Event evt, int x, int y) { SlideBuffer (); return true; }//emd mouseUp(.,.,.) public boolean mouseDown(Event evt, int x, int y) { mfDragInit = false; return true; } public boolean mouseDrag (Event evt, int x, int y) { if (mfDragInit) { miXpan = ( x - miOldx); miYpan = (y - miOldy); repaint(); }//end if else { miOldy = y; miOldx = x; mfDragInit = true; }//end else //Add 100 pixel mouse drag interval to do a buffer slide int miMouseDragInterval = 100; if ( (miXpan >= miMouseInterval) ||(miXpan <= - miMouseInterval) ||(miYpan >= miDragInterval) ||(miYpan <=- miDragInterval) ) SlideBuffer (); return true; } //end mouseDrag public void paint (Graphics g) { g.drawImage (offscreenImage, miXpan, miYpan, this); }//end paint //private variables private Canvas mDrawingObject; private int miXpan = 0; private int miYpan = 0; private int miOldx = 0; private int miOldy = 0; private int miBufferShiftX = 0; private int miBufferShiftY =0; private boolean mfDragInit = true; private final int miBuffersize = 600; //make this at least size of window //{{DECLARE_CONTROLS //}} }//end class BufferTest