|
|
|||
Exkurs: Java-Applets, Teil 3 |
|||
Dieser Exkurs ist für all diejenigen Schüler(innen) gedacht, die bisher noch keine Gelegenheit hatten, sich mit Java-Applets zu befassen, jetzt aber für eine Übung, die viele Punkte bringt, ein solches Applet schreiben müssen. In diesem dritten Teil der Exkurs-Reihe "Java-Applets" geht es speziell um das Anzeigen von Bildern in Java. |
Der erste Teil des Exkurses "Java-Applets" behandelt die Grundlagen: Was ist ein Applet, und wie kann man einfache Figuren auf die Zeichenfläche malen? Im zweiten Teil des Exkurses wird der Einsatz von TextFields und Buttons gezeigt. In diesem dritten Teil beschäftigen wir uns mit dem Anzeigen von Bildern. |
||
Ein ganz einfaches BeispielSie haben mit Photoshop ein ganz tolles Bild gezeichnet, das Sie nun in einem Java-Applet anzeigen wollen. Angenommen, Ihr Bild hat die Dimensionen 200 x 200 Pixel und den Namen "Test.jpg" und befinde sich im Ordner "Bilder", der sich wiederum in Ihrem aktuellen Projekt-Ordner befindet. Dann erzeugt folgender Quelltext ein Applet, welches Ihr Bild anzeigt: import java.awt.*;
import javax.swing.*;
public class Graphikdemo extends JApplet
{
Image bild;
public void init()
{
bild = getImage(getDocumentBase(),
"Bilder/Test.jpg");
}
public void paint(Graphics g)
{
g.drawString("Anzeigen von Bildern", 20, 20);
g.drawImage(bild,100,100,200,200,this);
}
}
|
|||
| Und hier ein Bildschirmphoto von einem solchen Applet:
1 Ein Applet, das eine JPG-Graphik anzeigt. Als ich meinen Schülern das Anzeigen von Graphiken auf den Windows 2000 - Rechnern unserer Schule demonstrieren wollte, hatten wir zunächst Probleme. Julian Weber (einer meiner Schüler) hatte dann aber Erfolg, als er statt getDocumentBase() den Befehl getCodeBase() in dem getImage()-Aufruf verwendet hat. Das zeigt doch, dass es durchaus was bringt, wenn man mal Eigeninitiative entwickelt und selbst auf den Sun-Seiten nach passenden Befehlen sucht. Gehen wir dieses einfache Beispiel noch einmal genau durch. Wer von Ihnen den Quelltext bereits verstanden hat, kann die folgende Quelltextanalyse ja überspringen. |
|||
Quelltext-AnalyseDie erste wichtige Zeile ist die Deklaration des Bild-Objektes: Image bild Image ist dabei eine Klasse, die den Zugriff auf Bilddateien ermöglicht. Die zweite wichtige Zeile ist die Initialisierung des Bild-Objekts: bild = getImage(getDocumentBase(), "Bilder/Test.jpg"); bzw. bild = getImage(getCodeBase(), "Bilder/Test.jpg"); Hier wird das Objekt bild mit der physikalischen Datei "Test.jpg" im Ordner "Bilder" verknüpft. Der Applet-Befehl getDocumentBase() bzw. getCodeBase() ist notwendig, um den relativen Dateipfad des Bildes zu sichern. Ein Auszug aus der Original-Sun-Dokumentation klärt alle noch offenen Fragen: getCodeBase() Gets the base URL. This is the URL of the directory which contains this applet. getDocumentBase() Gets the URL of the document in which this applet is embedded. Die dritte wichtige Zeile ist für das Anzeigen des Bildes im Applet verantwortlich: g.drawImage(bild,100,100,200,200,this); Der drawImage()-Befehl der Klasse Graphics erwartet - zumindest in diesem Beispiel - sechs Parameter: Erst mal das Bild-Objekt, das angezeigt werden soll, dann die Koordinaten der linken oberen Ecke des rechteckigen Bildes, anschließend die Breite und die Höhe des Bildes in Pixeln und schließlich einen Zeiger auf das Applet, in dem das Bild angezeigt werden soll. In unserem Fall soll das Bild in "diesem" Applet angezeigt werden, also wird einfach ein "this" als aktueller Parameter verwendet. Neben dem oben verwendeten drawImage()-Befehl mit sechs Parametern gibt es in der Klasse Graphics weitere Versionen. Aber schauen Sie selbst auf den Sun-Seiten nach! Ende der Quelltext-Analyse! |
|||
Anzeigen von Bildern durch eigene KlassenIn der Regel greift ein Applet auf Objekte verschiedener Klassen zu. Wie kann man nun die anzeigen()-Methode einer Klasse Beispiel dazu bringen, Bilder anzuzeigen? Schritt 1:Deklarieren Sie ein Objekt bild der Klasse Image als Attribut der Klasse Beispiel. public class Beispiel
{
Image bild;
andere Attribute....
Schritt 2:Sie müssen vor dem Anzeigen des Bildes das Objekt bild initialisieren. Dazu müssen Sie den Befehl getImage() aufrufen, der aber eine Methode der Klasse Applet bzw. JApplet ist. Da Ihre Klasse Beispiel aber eine "normale" Klasse ist und kein Applet, müssen wir einen Verweis auf das aufrufende Applet als Parameter übergeben. Das könnte so aussehen: public Beispiel(String dateiname, Applet p)
{
bild = p.getImage(p.getCodeBase(), dateiname);
}
Der Parameter p ist also vom Typ Applet bzw. JApplet. Sie können dann innerhalb des Konstruktors Ihrer Klasse auf die notwendigen Applet-Methoden getImage() und getCodeBase() zugreifen. Den Dateinamen übergeben Sie ebenfalls als Parameter, da ja der Konstruktor der Klasse Beispiel nicht unbedingt weiß, welche Bilddatei Sie später mal anzeigen wollen. Schritt 3:Das eigentliche Anzeigen des Bildes. Hierzu können Sie nun in der anzeigen()-Methode folgenden Befehl verwenden:public anzeigen(Graphics g, int x, int y)
{
g.drawImage(bild,x,y,200,200,null);
}
Dass der Parameter null hier funktioniert, hat mich selbst überrascht. Sollte es auf Ihrem Rechner nicht gehen, versuchen Sie doch mal die Alternative public anzeigen(Graphics g, int x, int y, Applet p)
{
g.drawImage(bild,x,y,200,200,p);
}
Allerdings müssen Sie dann der anzeigen()-Methode beim Aufruf den Applet-Parameter übergeben. Wenn Sie anzeigen() aus dem Applet heraus aufrufen, so müssen Sie "this" als aktuellen Parameter angeben. |
|||
Kehren Sie nun bitte zu der Seite zurück, von der sie gekommen sind.Diese HTML-Seite wurde erstellt von Ulrich Helmich am 26. Januar 2006. |
|||