import java.awt.*;
import java.awt.event.*;
public class MouseFrame extends Frame {
private DrawingBoard board;
public MouseFrame(String title) {
super(title);
setSize(600, 400);
setLocationRelativeTo(null); //Fenster zentrieren
/* Um das Fenster schließen und das Programm beenden zu können
* muss noch ein Listener implementiert werden, der das Klicken
* auf die Fenster-Knöpfe zum Schließen, Vergrößern und Verkleinern
* beobachtet.
* Hier eine Variante mit einer Adapterklasse.
* Adapterklassen sind "Bequemlickeitsklassen", bei deren Verwendung
* nicht alle Methoden des Interfaces überschrieben werden brauchen,
* weil dies schon in der Adapterklasse gemacht wurde.
* Es braucht also nur noch die Methode überschrieben zu werden, die
* von Interesse ist.*/
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
board = new DrawingBoard();
add(board, BorderLayout.CENTER);
}
/** Ein Zeichenbrett, auf dem gezeichnet werden kann.
* DrawingBoard ist eine innere Klasse.
* Im Gegensatz zu MouseFrame, in welcher das WindowEvent mit Hilfe einer
* Adapterklasse aufgefangen wird, hier nun die Variante mit der
* Implementierung des Listener-Interfaces.
* Bei dieser Vorgehensweise müssen alle Methoden des Listeners
* überschrieben werden, es genügt ein leerer Methodenkörper. */
class DrawingBoard extends Panel implements MouseListener {
int x, y, r; //x/y-Koordinaten, Kreis-Radius
public DrawingBoard() {
addMouseListener(this); //Beispiel mit Implementierung aller Listener-Methoden
}
/** Die geerbte paint()-Methode wurde überschrieben, so dass sie
* auf dem Zeichenbrett Kreise zeichnen kann. */
public void paint(Graphics g) {
g.drawOval(x, y, r, r);
}
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
r = 100;
repaint();
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
public static void main(String[] args) {
MouseFrame mf = new MouseFrame("Kreise zeichnen");
mf.setVisible(true);
}
}