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){
   ...
}

Weiterführende Links

Kapitel zu Listener in Java ist auch eine Insel

Lehrvideo  (YouTube)