Les applets de Javaside.com

Main page
Home
[ Home Page FR | Applets | Servlets | Composants ASP | Trucs et Astuces ]


Retour Index

  • tipsImg4.java : Telecharger le source


  • Exemple


  • tipsImg4.java
    //****************************************************************************** 
    // ----------------------------------------------------------- 
    // tipsImg4.java ( Thread et Double Buffer ) 
    // ----------------------------------------------------------- 
    // Author : R. BERTHOU 
    // E-Mail : rbl@berthou.com 
    // URL    : http://www.javaside.com 
    // ----------------------------------------------------------- 
    // 1.00 * R.BERTHOU  * 16/04/2000 * samples tips 
    //****************************************************************************** 
    
     // Importations 
     import java.awt.Graphics ; 
     import java.awt.Image ; 
     import java.awt.MediaTracker; 
     import java.awt.Color; 
     import java.awt.Image; 
     import java.awt.Event; 
    
     public class tipsImg4 extends java.applet.Applet  
                                implements Runnable 
     { 
         // Variables 
         Image img ;                 // ... 
    
          Thread th ; 
    
          long delay = 5 ; 
    
          int xPos = 0 ; 
          int yPos = 0 ; 
    
          int aW = -1 ; 
          int aH = -1 ; 
          int iW = -1 ; 
          int iH = -1 ; 
    
          int cX = 1 ; 
          int cY = 1 ; 
    
          // true => double buffer active 
          boolean b = true ; 
    
          // for double buffering to prevent flicker 
          Image offScreenImage; 
          Graphics offScreen; 
    
         // Initialisation de l'applet 
         public void init() {  
           MediaTracker  trk = new MediaTracker(this) ; 
    
          // Lecture de l'image 
          img =  getImage(getCodeBase(), "./photo.gif") ; 
    
             // Ajout de l'image dans le MediaTracker 
           trk.addImage(img, 0) ; 
    
          try { 
                   trk.waitForAll() ; 
           } catch (InterruptedException e) { } 
    
    
         } 
    
         // control the starting of the applet 
         public void start() { 
              // create thread 
              th = new Thread(this); 
    
              // start the thread 
              th.start(); 
    
         } // end of start 
    
         // control the stopping of the applet 
         public void stop() { 
                   th.stop(); 
         } // end of stop 
    
         // control the running of the applet 
         public void run() { 
              // set the priority of the thread to low 
              Thread.currentThread().setPriority(Thread.MIN_PRIORITY); 
    
              // loop continuously 
              while(true) { 
                   // values for working out the constant delay 
                   long thisTick, waitTick; 
    
                   // calculate the tick to wait for 
                   waitTick = System.currentTimeMillis() + delay; 
    
                   // update the screen 
                   xPos += cX ; 
                   yPos += cY ; 
    
                   if (cX == 1) { 
                        if ( (xPos+iW) > aW) cX = -1 ; 
                   } 
                   else 
                        if ( xPos < 0) cX = 1 ; 
    
                   if (cY == 1) { 
                        if ( (yPos+iH) > aH) cY = -1 ; 
                   } 
                   else 
                        if ( yPos < 0) cY = 1 ; 
    
                   repaint (); 
    
                   thisTick = System.currentTimeMillis(); 
    
                   if ( thisTick<waitTick ) { 
                        try { 
                             Thread.currentThread().sleep( (int)(waitTick-thisTick)); 
                        } catch (InterruptedException e) {} 
                   } 
    
              }    // end of loop 
    
           } // end of run 
    
         // if you click on the applet you active or remove double buffer 
         public boolean mouseDown(Event e, int x, int y){ 
              b = !b ; 
              return true ; 
         } 
    
         // Called when the applet needs to be painted 
         // calls the flicker free updating system 
         public void paint (Graphics g) { 
              update(g); 
         } // end of paint 
    
         // Draw the applet without flicker 
         public synchronized void update(Graphics g) { 
              // get the size of the applet 
              int xW = size().width ; 
              int xH = size().height ; 
    
              if ((xW != aW) || (xH != aH) || (offScreen == null)) { 
                   // initialise the double buffering screen 
                   try { 
                        offScreenImage = createImage (xW, xH); 
                        offScreen = offScreenImage.getGraphics (); 
                   } catch (Exception e) { 
                        offScreen = null; 
                   } 
                   aW = xW ; 
                   aH = xH ; 
    
                   // get Image size 
                   iW = img.getWidth(this) ; 
                   iH = img.getHeight(this) ; 
              } 
    
              if ((offScreen!=null) && b) { 
                   paintApplet(offScreen); 
                   g.drawImage(offScreenImage,0,0,this); 
              }  else 
                   paintApplet(g); 
         } // end of update 
    
         // Draw applet 
         public void paintApplet(Graphics g) {  
              g.setColor(Color.white ) ; 
              g.fillRect(0, 0, aW, aH) ; 
              g.drawImage(img, xPos, yPos, this) ; 
              g.setColor(Color.red ) ; 
              g.drawString("double buffer : " + b, 10, yPos) ; 
         } 
    
      } 
    




Copyright © 1996..2003, BERTHOU. Tous droits réservés.
Dernière modification le 03 Mars 2003 18H20

C.N.I.L.
n° 707410