Konrad-Adenauer-Gymnasium Langenfeld

Informatik Grundkurs Einführungsphase

Der MouseListener in der Canvas-Klasse

Wie bereits in Kapitel 2 gesehen, wird zunächst einmal eine MouseListener-Klasse namens minipaint1MouseListener definiert, die die Klasse MouseAdapter erweitert. Diese enthält nur die Maus-Methode mousePressed, in die wir die Reaktion auf Klickereignisse einbinden.

Wir zeichnen einen Punkt an der Stelle P(X,Y), indem wir einen Kreis mit dem Mittelpunkt M(X,Y) und dem Radius 1 Pixel zeichnen.

Wir zeichnen eine Freihandlinie, indem wir jedes mal, wenn die Maus bewegt wird, eine Strecke von der aktuellen Stiftposition bis zur neuen Mausposition zeichnen. Da die Ereignisse sehr oft ausgelöst werden, werden kurze, meist nur 1-2 Pixel lange Strecken gezeichnet, die dann auf dem Bildschirm insgesamt wie eine Freihandlinie aussehen.

Damit müssen wir in der Methode mousePressed in Abhängigkeit von unserer modus-Eigenschaft des Zeichenmodus unterschiedliche Dinge tun. Damit wir später noch für weitere Zeichenmodi Dinge ergänzen können, werden wir die Verzweigung gleich als switch-Anweisung ausformulieren. Vorher holen wir uns aber die Maus-Position in die lokalen Variablen x und y und verwenden dazu die Methoden getX und getX des MouseEvents:

int x = event.getX();
int y = event.getY();

Dann folgt die switch-Anweisung, die im Falle des Zeichenmodus 1 ( = Punkt ) einen Kreis zeichnet wie oben beschrieben. In allen anderen Fällen (also auch in unserem Zeichenmodus 5 für das Freihandzeichnen merken wir uns die aktuelle Position der Maus in den Eigenschaftswerten xStart und yStart. Insgesamt gibt es also folgenden switch-Block:

switch (modus)
{
  case 1:
    grGrafik.fillOval(x-1,y-1,3,3);
    break;
  default:
    xStart=x;
    yStart=y;
}

Zum Schluss wird dann noch repaint() aufgerufen.

Insgesamt sieht die Unterklasse minipaint1MouseListener dann so aus:

class minipaint1MouseListener extends MouseAdapter
{
  public void mousePressed(MouseEvent event)
  {
    int x = event.getX();
    int y = event.getY();
    switch (modus)
    {
      case 1:
        grGrafik.fillOval(x-1,y-1,3,3);
        break;
      default:
        xStart=x;
        yStart=y;
    }
    repaint();
  }
}

© Ralph-Erich Hildebrandt, 22. Februar 2004