Un curseur de souris qui bouge ;o) en plus la class est reutilisable...

Description

ben g trouver sa rigolo a faire et comme sa ma pas pris ;o) des heures ;)
g meme pri la peine de metre des commentaire a chaque methode...
evidement comme dabitude c tres epurer bien que la class soit utilisable tel que
elle est tout a fait ameliorable .. ;o) et comme javai pas le courage de faire 20 image pour une ptt anime ;o) g fait une ptt methode qui genere automatikement les image ;o) c etai moin lon a faire... ;o) et sa donne en + un ptt exemple de l utilisation des transformation affine de java2D ;o)

Source / Exemple :


import java.awt.Component;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

/**

  • @author ludo
  • implement un curseur de souris qui peu bouger
  • le mouvement du curseur est crer a partir d une seul image ou
  • peu etre init a partir d un tableau d image
  • /
class LudoCursor extends Thread { private Component parent = null; // memo le proprio du cursor private Cursor cursor = null; private Image[] images = null; private static final int DEFAULTNUMBERIMAGE = 20; // nombre d image par defaut private int delay = 0; // pause entre chac image private int idx = 0; // index courant ds le tableau d image private Point hotSpot = new Point( 0, 0 ); private boolean end = false; // stop l nimation private int incIdx = 1; // increment d index pour bouger la forme /**
  • implement un cursor mouvant a partir d une seule image
  • /
public static LudoCursor ActiveLudoCursor( Component component, Image image, Point hotSpot, int delay ) { return new LudoCursor( component, image, hotSpot, delay ); } /**
  • implement un cursor mouvant a partir d une sequence d image
  • /
public static LudoCursor ActiveLudoCursor( Component component, Image[] images, Point hotSpot, int delay ) { return new LudoCursor( component, images, hotSpot, delay ); } /**
  • desactive le thread d un cursor
  • /
public static void DesactiveLudoCursor( LudoCursor lc ) { lc.end = true; } /**
  • genere automatikement un curseur mobile en le faisant gonfler et diminuer
  • /
public LudoCursor( Component parent, Image[] images, Point hotSpot, int delay ) { this.parent = parent; this.hotSpot = hotSpot; this.delay = delay; this.images = images; start(); // lance le thread } /**
  • genere automatikement un curseur mobile en le faisant gonfler et diminuer
  • /
public LudoCursor( Component parent, Image image, Point hotSpot, int delay ) { this( parent, CreateDefaultCursors( image, hotSpot, DEFAULTNUMBERIMAGE ) , hotSpot, delay ); } /**
  • fabrik toute les image a partir de l image de depard
  • /
private static Image[] CreateDefaultCursors( Image image, Point hotSpot, int nombreImages ) { BufferedImage[] bi = null; // init le tableau d image du curseur try { bi = new BufferedImage[ nombreImages ]; double factor = 1. / (double)nombreImages; for (int i = 0; i < nombreImages; i++) { bi[ i ] = new BufferedImage( 32, 32, BufferedImage.TYPE_4BYTE_ABGR ); Graphics2D g = bi[ i ].createGraphics(); AffineTransform currentAff = new AffineTransform(); currentAff.translate( hotSpot.x, hotSpot.y ); double d = (i+1) * factor; currentAff.scale( d, d ); currentAff.translate( -hotSpot.x, -hotSpot.y ); g.transform( currentAff ); // aplik la ranformation g.drawImage( image, 0, 0, null ); // dessine le curseur } } catch (Exception e) { System.out.println("Erreur : " + e); } return bi; } /**
  • gestion du chagemetn d image du cursor
  • /
public void run() { try { while( !end ) { if ( parent != null ) { Cursor c = Toolkit.getDefaultToolkit().createCustomCursor( images[ idx ], hotSpot, "ludoCursor" ); idx += incIdx; if ( idx == 0 ) { idx = 1; incIdx = 1; } else if ( idx == (images.length-1) ) { incIdx = (images.length-1); incIdx = -1; } parent.setCursor( c ); // init le cursor Thread.sleep( delay ); // pause } // if parent } // while } catch (Exception e) { System.out.println( "error : " + e ); } } }

Conclusion :


bon ds le zip g aussi mit la class qui permet de voir un apercu de curseur animee

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.