Exemplu actiuni mouse: "Clic" si "drag"(tarare)

Codul urmator permite tararea unui patrat de culoare rosie pe suprafata appletului

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Mouse2 extends Applet
   implements MouseListener, MouseMotionListener {

   Image img;
   Image backbuffer;
   Graphics backg;

   int width, height;
   int x, y;    // coordinatele coltului stanga-sus al patratului
   int mx, my;  // cele mai recente coordonate ale indexului mouse
   boolean isMouseDraggingBox = false;

   public void init() {
      width = getSize().width;
      height = getSize().height;
      //setBackground( Color.black );

//pozitionez patratul in centrul apletului
      x = width/2 - 10;
      y = height/2 - 10;

      img = getImage(getDocumentBase(), "fractal.gif");
	System.out.println(getDocumentBase());
      backbuffer = createImage( width, height );
      backg = backbuffer.getGraphics();

      addMouseListener( this );
//appletul primeste evenimentele mouse
      addMouseMotionListener( this );
//precum si pe cele referitoare la  miscarea indexului mouse
   }

   public void mouseEntered( MouseEvent e ) { }
   public void mouseExited( MouseEvent e ) { }
   public void mouseClicked( MouseEvent e ) { }
   public void mousePressed( MouseEvent e ) {
      mx = e.getX();
      my = e.getY();
      if ( x < mx && mx < x+20 && y < my && my < y+20 ) {
         isMouseDraggingBox = true;
      }
      e.consume();
   }
   public void mouseReleased( MouseEvent e ) {
      isMouseDraggingBox = false;
      e.consume();
   }
   public void mouseMoved( MouseEvent e ) {
         int new_mx = e.getX();
         int new_my = e.getY();
	   showStatus( "Mouse at (" + new_mx + "," + new_my + ")" );
      if ( x < new_mx && new_mx < x+20 && y < new_my && new_my < y+20 ) {
         showStatus( "Mouse OVER at (" + new_mx + "," + new_my + ")" );
      }
	repaint();
	e.consume();
}
   public void mouseDragged( MouseEvent e ) {
      if ( isMouseDraggingBox ) {
         // obtine ultima pozitie a indexului mouse
         int new_mx = e.getX();
         int new_my = e.getY();

      // deplaseaza patratul cu distanta cu care s-a deplasat
	// indexul mouse de la ultimul eveniment de tarare
         x += new_mx - mx;
         y += new_my - my;

      // memoreaza noua pozitie
         mx = new_mx;
         my = new_my;
         repaint();
         
      }
	e.consume();
   }

   public void update( Graphics g ) {
	backg.drawImage( img, 0, 0, this );
	backg.setColor( Color.blue );
	backg.fillRect( x, y, 20, 20 );
       g.drawImage( backbuffer, 0, 0, this );
   }

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

Mergi aici pentru a vedea apletul in actiune.

Interfata MouseListener

Interfata MouseListener necesita implementarea metodelor:

mouseClicked

public void mouseClicked(MouseEvent e)

Invocata atunci cand s-a efectuat un clic (o apasare urmata de o eleiberare a unui buton al mouse)  pe o componenta (indexul mouse este in interiorul suprafetei unei componente).

mousePressed

public void mousePressed(MouseEvent e)

Invocata atunci cand un buton al mouse a fost apasat  (indexul mouse fiind deasupra unei componente).

mouseReleased

public void mouseReleased(MouseEvent e)

Invocata atunci cand un buton al mouse a fost eliberat (indexul mouse fiind deasupra unei componente).

mouseEntered

public void mouseEntered(MouseEvent e)

Invocata atunci cand indexul mouse intra in interiorul suprafetei unei componente.

mouseExited

public void mouseExited(MouseEvent e)

Invocata atunci cand indexul mouse paraseste suprafeta unei componente.

Interfata MouseMotionListener

Interfata MouseMotionListener necesita implementarea metodelor:

mouseDragged

public void mouseDragged(MouseEvent e)

Invocata cand un buton al mouse este apasat iar apoi indexul mouse este modificat fara ca butonul sa fie eliberat (ebenimentul drag - tarare). Evenimentele referitoare la tarare vor vontinua sa fie trimise componentei, deasupra careia a inceput tararea, pana cand butonul este eliberat (indiferent daca indexul mouse mai este sau nu deasupra componentei implicate).

mouseMoved

public void mouseMoved(MouseEvent e)

Invocat cand indexul mouse se misca deasupra unei componente (in timp ce nici un buton nu este apasat).

© Cornel Mironel Niculae, 2004-2007

26-Jun-2007