Vorlesung Informatik 1 - Teil A: Java Kurs
1.13 Maus-Events und Listener
Objekte vom Typ java.awt.MouseEvent werden durch verschiedene Aktionen der Maus ausgelöst.
Ein MouseEvent hat u.A. folgendeMethoden:
getX(): int
x-Position (Pixel) innerhalb der Komponente
getY():
int
y-Position (Pixel) innerhalb der Komponente
getPoint(): Point
Ein java.awt.Point Objekt mit den (x,y) Koordinaten der Maus innerhalb der
Komponente
getXOnScreen(): int
x-Position auf dem Bildschirm (Pixel)
getYOnScreen(): int y-Position auf dem Bildschirm (Pixel)
getButton(): int
welcher Knopf wurde gedrückt (falls zutreffend)
Ähnlich wie beim ActionEvent gibt es Listener
Interfaces:
java.awt.event.MouseListener:
mousePressed(e: MouseEvent):
void eine Taste wurde
gedrückt
mouseReleased(e: MouseEvent): void eine Taste
wurde losgelassen
mouseClicked(e: MouseEvent): void
eine Taste wurde geklickt (drücken und loslassen)
mouseEntered(e: MouseEvent):
void Mauszeiger betritt die Komponente, auf
die der Listener registriert ist
mouseExited(e: MouseEvent): void
Mauszeiger verlässt die Komponente, auf die der Listener registriert
ist
die beiden letzten Methoden nutzt man z.B., um den Mauszeiger oder den Hintergrund einer aktiven Komponente zu verändern (Mouse-Over).
Eine Klasse, die MouseListener implementiert, muss alle Methoden enthalten, viele Methoden bleiben leer, weil man z.B.nur auf Klick reagieren will.
Meist registrieren wir MouseListener auf JPanel Objekte:
class MausHorcher implements MouseListener{ ... }
...
JPanel p = new
JPanel();
p.addMouseListener(new
MouseHorcher());
Beispiel: ein Panel, das sein eigener MouseListener ist und bei
unterschiedlichen Maus-Ereignissen die Hintergrundfarbe wechselt:
public class MausFarbPanel extends JPanel implements
MouseListener {
private Random r = new Random();
public
MausFarbPanel() {
Color farbe = new Color(r.nextInt(256), r.nextInt(256),
r.nextInt(256));
this.setBackground(farbe);
this.addMouseListener(this);
}
@Override
public void mouseEntered(MouseEvent arg0) {
Color farbe = new Color(r.nextInt(256), r.nextInt(256),
r.nextInt(256));
this.setBackground(farbe);
}
@Override
public void mousePressed(MouseEvent arg0) {
Color farbe = this.getBackground().brighter();
this.setBackground(farbe);
}
@Override
public void mouseReleased(MouseEvent arg0) {
Color farbe = this.getBackground().darker();
this.setBackground(farbe);
}
@Override
public void mouseClicked(MouseEvent arg0) { /* absichlich leer */
}
@Override
public
void mouseExited(MouseEvent arg0) { /* absichlich leer */ }
}
Das Interface MouseMotionListener reagiert auf Mausbewegung. Es fordert nur zwei
Methoden:
mouseMoved(e: MouseEvent): void die Maus
bewegt sich
mouseDragged(e: MouseEvent): void die Maus bewegt sich
während eine Taste gedrückt ist
Will man gleich reagieren, egal ob die Maus mit oder ohne gedrücktem Knopf bewegt wurde, ruft mouseDragged
mouseMoved oder umgekehrt:
public void mouseDragged(MouseEvent e){
this.mouseMoved(e);
}
public void mouseMoved(MouseEvent e){
...
}