Zdarzenia myszy
W javie aby obsłużyć zdarzenia myszy należy zaimplementować interfejs
MouseListener z pakietu
java.awt.event.*.
Interfejs ten wymusza dodanie następujących metod:
- public void mouseClicked(MouseEvent e)
Reaguje na kliknięcie myszy.
- public void mouseEntered(MouseEvent e)
Reaguje na wejście kursora myszy w obszar komponentu.
- public void mouseExited(MouseEvent e)
Reaguje na wyjście kursora myszy z obszaru komponentu.
- public void mousePressed(MouseEvent e)
Reaguje na naciśnięcie przycisku myszy.
- public void mouseReleased(MouseEvent e)
Reaguje na zwolnienie przycisku myszy.
Wszystkie te metody przyjmują jako argument klase
MouseEvent
Oto jej ważniejsze metody:
- Point getPoint( )
Zwraca położenie kursora myszy.
Alternatywne metody to: int getX( ) i int getY( ).
- int getButton( )
Zwraca wartość przycisku myszy odpowiedzialnego za wygenerowanie zdarzenia.
Wartości te odpowiadają stałym NOBUTTON, BUTTON1, BUTTON2 i BUTTON3.
Aby zarejestrować klasę nasłuchującą zdarzenie (implementującą interfejs MouseListener) należy wywołać metodę
addMouseListener jako parametr podając klasę implementującą to zdarzenie.
A teraz przykład obsługi zdarzeń myszy.
Napiszemy prostą grę, która będzie mierzyć czas kolejnych kliknięć gracza na losowo wygenerowany kwadrat:
[Uruchom aplet]
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;
public class fajer
extends Applet
implements MouseListener
{
int pozX, pozY;
Random r = new Random( ); // 1
float czas;
Date czas1=new Date( ), czas2= new Date( ); // 2
public void init( )
{
addMouseListener(this);
losuj( );
}
public void paint(Graphics g)
{
g.drawString("Czas reakcji: " + czas + " s.", 20, 20);
g.fillRect(pozX, pozY, 20, 20);
}
void losuj( )
{
pozY = r.nextInt(this.getHeight( )-20);
pozX = r.nextInt(this.getWidth( )-20);
}
public void mouseClicked(MouseEvent e)
{
if(e.getX( )>pozX && e.getX( )<pozX+20 && e.getY( )>pozY && e.getY( )<pozY+20)
{
losuj( );
czas2 = new Date( );
czas = (float)(czas2.getTime( ) - czas1.getTime( ))/1000;
czas1 = new Date( );
repaint( );
}
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
}
1. Klasa Random służy do generowania liczb pseudolosowych (patrz: Klasa Random).
2. Klasa Date służy nam do mierzenia czasu. Klasę tą szerzej opiszę niebawem.
>Kliknij tutaj by skomentować, zgłosić błąd, lub uzupełnić tą część kursu.<