xboot.de
Java-Games Kontakt

MIDlets selbst erstellen > 2 3 4 5

Die Klasse Canvas


Die Klasse Canvas

Wie bereits erwähnt eignet sich die Klasse Canvas wunderbar, um frei auf dem Display zu zeichnen oder auch Text auszugeben.
Wir werden die Canvas-Klasse in eine seperate Datei auslagern. Es ist jedoch auch möglich sie innerhalb der bestehenden Datei unterzubringen. Ich habe es mir zur Angewohnheit gemacht fast jede Klasse in einer eigenen Datei unterzubringen. Ein Obfuscator (was das ist erfahrt ihr später) macht das meist auch.

Erstellen wir also eine neue Klasse mit dem Namen HelloCanvas, die von Canvas erbt. Wenn wir uns die API-Dokumentation zu Canvas anschauen merken wir, das Canvas eine abstrakte Methode mit dem Namen paint enthält. Dadurch ist Canvas natürlich automatisch auch eine abstrakte Klasse. Und was bedeutet das für uns? Nun in unserer Canvas-Klasse (HelloCanvas) müssen wir ebenfalls eine Methode mit dem Namen paint einbauen. Die Grundstruktur der Datei muss also folgendermaßen aussehen:
import javax.microedition.lcdui.*;

class HelloCanvas extends Canvas {

    public void paint(Graphics g) {
    }
}
Unter welchem Namen muss diese Datei eigentlich gespeichert werden? Richtig - HelloCanvas.java
Wie man sieht, muss der paint-Methode ein Graphics-Objekt übergeben werden. Tja woher nehmen? Und jetzt eine tolle Nachricht - wir brauchen uns darum nicht kümmern. Das erledigt in unserem Fall das Handy. Die Methode wird auch wie von Geisterhand von alleine aufgerufen, wie wir bald überprüfen werden.

Unsere paint-Methode ist noch leer, das wollen wir jetzt erst einmal ändern. Als erstes "leeren" wir die Canvas (bzw. letztendlich das Handy-Display). Nun kommt auch das Graphics-Objekt zum Einsatz. In der Dokumentation finden wir viele Methoden in der Klasse Graphics um Elemente zu zeichnen, wie z.B. eine zum Zeichnen einer Linie, eine zum Zeichnen eines Strings, eine zum Zeichnen eines Rechtecks und jede Menge mehr. Da der paint-Methode ein Graphics-Objekt mit dem Bezeichner g übergeben wird, können wir dieses Objekt zum Zeichnen benutzen.
Als erstes setzen wir die Graustufe auf weiß:
        g.setGrayScale(255);
Damit sollten monochrome und farbige Displays zurecht kommen. Dann zeichnen wir ein (gefülltes) Rechteck über die komplette Canvas:
        g.fillRect(0, 0, getWidth(), getHeight());
Indem wir als Parameter getWidth() und getHeight() mitgeben stellen wir sicher, dass unser Rechteck die volle Größe der Canvas erhält. Wer sich jetzt fragt wo diese beiden Methoden herkommen, sollte in der API-Dokumentation die Klasse Canvas genauer betrachten. Von dieser Klasse hat unser HelloCanvas diese Methoden geerbt.
Jetzt wo die "Leinwand" bereit für unsere Ausgaben ist, müssen wir erst einmal die Farbstufe auf schwarz stellen, bzw. auf das Dunkelste was das Handy-Display darstellen kann. Bekanntlich sind ja Handys mit blauen Displays sehr beliebt ;-) Allerdings sind Farbdisplay stark im Kommen und werden monochrome Displays schnell abgelöst haben.
        g.setGrayScale(0);
Nun wollen wir natürlich noch etwas ausgeben. Und zwar den Namen den wir vorher vom Nutzer eingelesen haben. Jetzt müssen wir ihn nur noch von unserer Hello-Klasse erfahren. Dazu verwenden wir einfach einen Konstruktor in dem wir danach verlangen.
Unsere Klasse sollte nun so aussehen:
import javax.microedition.lcdui.*;

class HelloCanvas extends Canvas {

    private String name;

    public HelloCanvas(String n) {
        name = n;
    }

    public void paint(Graphics g) {
        g.setGrayScale(255);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setGrayScale(0);
        g.drawString("Hello", getWidth() / 2, 2, Graphics.TOP|Graphics.HCENTER);
        g.drawString(name, getWidth() / 2, getHeight() / 2, Graphics.BASELINE|Graphics.HCENTER);
    }
}
Ich hoffe, dass der Quelltext bis hierher verstanden ist. Wir müssen nun nämlich einige Veränderungen daran vornehmen.


Nach Oben     Weiter >





© 2002 Steffen Bott
powered by iqbo