Konrad-Adenauer-Gymnasium Langenfeld

Informatik Grundkurs Einführungsphase

Eine eigene Canvas-Klasse

Damit wir nun zeichnen können, benötigen wir eine eigene Canvas-Klasse, die hhCanvas (für Hexenhaus-Canvas) heißen soll. Denn die paint()-Methode im Applet wirkt auf die gesamte Zeichenfläche. Wir wollen aber nur eine Zeichnung im rechten Teil unseres BorderLayouts erzeugen.

Anlage der Datei

Erzeugen Sie dazu über Datei | Neu | Java eine neue "Java"-Datei..

Speichern Sie das unter dem Namen hhCanvas.java im gleichen Verzeichnis (U:\JavaProjects\Hexenhaus) ab wie Ihre Datei Hexenhaus.java.

Klicken Sie nun diese Datei an.

Leere Klasse

Dort benötigen wir zunächst einmal einen leeren Rahmen für unsere eigene Canvas-Klasse, die die Klasse Canvas aus java.awt erweitert.

import java.awt.*;
public class hhCanvas extends Canvas
{
}

Der Konstruktor

Damit wir eine Instanz unserer Canvas-Klasse hhCanvas im Hexenhaus-Applet erzeugen können, benötigen wir einen Konstruktor. Der soll auch gleich die Größe unseres für unseren Canvas bekommen.

Dazu benötigen wir zwei interne Variablen, die die Breite und Höhe unseres Canvas festlegt. Diese sollen aber von außen nicht direkt zugreifbar sein (Kapselung), sondern nur durch die Methoden unserer Klasse. Daher deklarieren wir sie als private:

private int iBreite;
private int iHöhe;

Über den Konstruktor werden nun die Übergabedaten an diese Variablen übergeben und dann die Größe des Canvas gesetzt. Da die Übergabeparameter und die internen Variablen den gleichen Namen tragen, wird vor den internen Variablen this gesetzt.

//Konstruktor
public hhCanvas(int iBreite, int iHöhe)
{
  this.iBreite=iBreite;
  this.iHöhe=iHöhe;
  this.setSize(iBreite,iHöhe);
}

Der Konstruktor heißt dabei genauso wie die Klasse selbst.

Weitere Vorbereitungsarbeiten

Nun benötigen wir ein Image-Objekt, in dem die Grafik angelegt wird und einen Grafikkontext, auf den wir zeichnen können. Beides definieren wir am Anfang der Klasse als lokale Objekte und erzeugen eine Methode init(), in der wir diese Objekte für unseren Canvas initialisieren:

private Image imBild;
private Graphics grGrafik;
public void init()
{
  imBild=createImage(iBreite,iHöhe);
  grGrafik=imBild.getGraphics();
}

Aufruf und Definition in der Hexenhaus.java

In der Hexenhaus.java müssen wir nun dafür Sorge tragen, dass wir auf diese Elemente zugreifen können.

Zunächst müssen wir eine neue Objektvariable eines hhCanvas-Objekts erzeugen:

hhCanvas cvZeichnung;

Dann müssen wir in der init()-Methode erst einmal den Konstruktor von hhCanvas aufrufen. Als Größenmaße übergeben wir ihm die Größe des pnWork-Panels.

cvZeichnung = new hhCanvas(640-pnMenü.getSize().width,480-pnTitel.getSize().height-pnCopyright.getSize().height);

Dann muss der Canvas dem Panel pnWork hinzugefügt und seine Hintergrundfarbe auf weiss gesetzt werden.

pnWork.add(cvZeichnung);
cvZeichnung.setBackground(Color.white);

Zum Schluss rufen wir noch die selbstdefinierte init()-Methode unserer Canvas-Klasse auf.

cvZeichnung.init();


© Ralph-Erich Hildebrandt, 03. September 2006