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.
MouseListener
Interfata MouseListener
necesita implementarea metodelor:
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).
public void mousePressed(MouseEvent e)
Invocata atunci cand un buton al mouse a fost apasat (indexul mouse fiind deasupra unei componente).
public void mouseReleased(MouseEvent e)
Invocata atunci cand un buton al mouse a fost eliberat (indexul mouse fiind deasupra unei componente).
public void mouseEntered(MouseEvent e)
Invocata atunci cand indexul mouse intra in interiorul suprafetei unei componente.
public void mouseExited(MouseEvent e)
Invocata atunci cand indexul mouse paraseste suprafeta unei componente.
MouseMotionListener
Interfata MouseMotionListener
necesita implementarea metodelor:
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).
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