Wie kann man Mausereignisse abfragen?

Mausereignisse (MouseEvents) werden durch das Interface MouseListener beobachtet. Es definiert fünf Methoden für deren Behandlung.

Mausereignisse werden bei der Bedienung einer Computermaus ausgelöst. Sie beziehen sich immer auf eine Komponente, also ein Objekt einer von java.awt.Component abgeleiteten Klasse1. Damit dort auf Mausereignisse reagiert werden kann, muss die Komponente durch Component#addMouseListener(MouseListener) bei einem MouseListener angemeldet werden. Das hierbei als Parameter übergebene Objekt muss das Interface MouseListener implementieren. Es definiert fünf Methoden, die verschiedene Mausereignisse behandeln können. Hierzu bekommen sie ein MouseEvent übergeben.

Es wird automatisch erzeugt, wenn die Maus eine der in der u.a. Tabelle aufgeführten Aktionen durchführt. Es kann - wie jeder andere Parameter - innerhalb der Methode angesprochen werden. Hierzu definiert MouseEvent selbst eine Reihe von Methoden, mit denen die Eigenschaften der Klasse (Anzahl Klicks, Position des Mauszeigers, etc.) abgefragt werden können.

Signatur Ausführung
void mouseEntered(MouseEvent e) Wird ausgeführt, wenn die Maus die Oberfläche der Komponente betritt.
void mouseExited(MouseEvent e) Wird ausgeführt, wenn die Maus die Oberfläche der Komponente verlässt.
void mousePressed(MouseEvent e) Wird ausgeführt, wenn die Maustaste gedrückt wird.
void mouseReleased(MouseEvent e) Wird ausgeführt, wenn die Maustaste losgelassen wird.
void mouseClicked(MouseEvent e) Wird ausgeführt, wenn die Maus geklickt (gedrückt und losgelassen) wird.

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;

public class Mausereignisse extends JFrame implements MouseListener {

    public Mausereignisse() {
        this.addMouseListener(this);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Maus Ereignisse");
        this.setSize(600, 400);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("Mouse " + e.getClickCount() + " times clicked at "
                + e.getPoint());
    }

    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("Mouse " + e.getClickCount() + " times pressed at "
                + e.getPoint());
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("Mouse " + e.getClickCount() + " times released at "
                + e.getPoint());
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("Mouse entered at " + e.getPoint());
    }

    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("Mouse exited at " + e.getPoint());
    }

    public static void main(String[] args) {
        new Mausereignisse();
    }
}

Im Beispiel wird ein Fenster in Form eines JFrame erzeugt. Durch Component#addMouseListener(MouseEvent) wird der MouseListener beim Frame registriert. Im vorliegenden Fall implementiert die Klasse selbst den Listener und muss somit die fünf Methoden des Interface konkretisieren.

Ein Ausführen des Beispiels zeigt das Verhalten durch die Konsolenausgabe. Bemerkenswert ist hierbei, dass MouseEvent#getClickCount() nicht nur Einfach- und Doppeklicks registriert, sondern, nach genügend schnellen Tastendrücken, jede beliebige Anzahl zurückgibt. So können auch Dreifach- oder sogar Vierfachklicks selektiv registriert werden.

MouseAdapter

In vielen Fällen müssen nur ein oder zwei Mausereignisse abgefragt werden. Es würde den Code unnötig verunklären, wenn dann alle fünf Methoden implementiert werden müssten. Java stellt hierzu die Adapter-Klasse MouseAdapter bereit. Sie macht die Implementierung des vollständigen Interface überflüssig. Die Verwendung von MouseAdapter gestattet es, dann nur die jeweils benötigten Methoden zu überschreiben, um die gewünschte Funktionalität zu erhalten.
Gerne wird dies in Form einer anonymen Klasse realisiert.

public class Mausereignisse extends JFrame {
    //...
    this.addMouseListener(new MouseAdapter() {
        public void mouseReleased(MouseEvent e){
            System.out.println("Maus losgelassen");
        }
    });
    //...
}

1) Eine Ausnahme hiervon bildet die Klasse java.awt.TrayIcon.