Java-Applet wird häufig zum Anzeigen von in GIF-Dateien gespeicherten Bildern verwendet. Das Laden von GIF-Bildern im Java-Applet ist sehr einfach. Wenn Sie Bilddateien im Applet verwenden, müssen Sie das Image-Objekt definieren. Die meisten Java-Applets verwenden Bilddateien im GIF- oder JPEG-Format. Das Applet verwendet die getImage-Methode, um die Bilddatei mit dem Image-Objekt zu verknüpfen.
Die Methode drawImage der Graphics-Klasse wird zum Anzeigen von Bildobjekten verwendet. Um den Anzeigeeffekt von Bildern zu verbessern, verwenden viele Applets die Doppelpufferungstechnologie: Laden Sie das Bild zuerst in den Speicher und zeigen Sie es dann auf dem Bildschirm an.
Mit der imageUpdate-Methode kann das Applet ermitteln, wie viel von einem Bild sich bereits im Speicher befindet.
Laden eines Bildes
Java behandelt Bilder als Bildobjekte, daher müssen Sie beim Laden eines Bildes zuerst das Bildobjekt definieren. Das Format lautet wie folgt:
Bildbild
und verwenden Sie dann die Methode getImage, um das Bildobjekt und die Bilddatei zu verbinden:
picture=getImage(getCodeBase( ),"ImageFileName.GIF");
Die getImage-Methode verfügt über zwei Parameter. Der erste Parameter ist ein Aufruf der getCodeBase-Methode, die die URL-Adresse des Applets zurückgibt, z. B. www.sun.com/Applet . Der zweite Parameter gibt den Namen der Bilddatei an, die von der URL geladen werden soll. Befindet sich die Bilddatei in einem Unterverzeichnis des Applets, sollte der entsprechende Verzeichnispfad im Dateinamen enthalten sein.
Nachdem das Bild mit der Methode getImage geladen wurde, kann das Applet die Methode drawImage der Klasse Graphics verwenden. Das Formular lautet wie folgt:
g.drawImage(Picture,x,y,this);
Die Parameter der Methode drayImage Geben Sie das anzuzeigende Bild an und geben Sie die x- und y-Koordinaten der oberen linken Ecke des Bildes an.
Der Zweck des vierten Parameters besteht darin, ein Objekt anzugeben, das die ImageObServer-Schnittstelle implementiert, dh ein Objekt, das die imageUpdate-Methode definiert (diese Methode wird später erläutert).
Bild anzeigen (ShowImage.java)
//Quellprogrammliste
java.awt.* importieren;
import java.applet.*;
Die öffentliche Klasse ShowImage erweitert das Applet
Image picure; //Mitgliedsvariablen vom Typ Image definieren
public void init()
{
picture=getImage(getCodeBase(),"Image.gif"); //Bild laden
}
Farbe für öffentliche Räume (Grafik g)
{
g.drawImage(picture,0,0,this); //Bild anzeigen
}
}
Aus diesem Grund lauten die Aussagen zum Applet in der HTML-Datei wie folgt:
<HTML>
<TITEL>Bild-Applet anzeigen</TITEL>
<APPLET
CODE="ShowImage.class" //Der Klassendateiname ist ShowImage.class
BREITE=600
HÖHE=400>
</APPLET>
</HTML>
Wenn das Applet nach der Kompilierung ausgeführt wird, ist das Bild nicht auf einmal vorhanden. Dies liegt daran, dass das Programm das Bild nicht vollständig lädt und anzeigt, bevor die Methode drawImage zurückkehrt. Im Gegensatz dazu erstellt die Methode drawImage einen Thread, der gleichzeitig mit dem ursprünglichen Ausführungsthread des Applets ausgeführt wird. Er wird gleichzeitig geladen und angezeigt, wodurch diese Diskontinuität entsteht. Um den Anzeigeeffekt zu verbessern. Viele Applets verwenden die Image-Double-Buffering-Technologie, das heißt, das Bild wird vollständig in den Speicher geladen und dann auf dem Bildschirm angezeigt, sodass das Bild auf einmal angezeigt werden kann.
Bilder mit doppelter Pufferung
Um den Anzeigeeffekt von Bildern zu verbessern, sollte die Technologie der doppelten Pufferung verwendet werden. Das Bild wird zunächst in den Speicher geladen und dann im Applet-Fenster angezeigt.
Beispiel für die Verwendung der Double-Buffering-Image-Technologie (BackgroundImage.java)
//Quellprogrammliste
java.awt.* importieren;
import java.applet.*;
öffentliche Klasse BackgroundImage erweitert Applet //Applet erben
{
Bildbild;
Boolean ImageLoaded=false;
public void init()
{
picture=getImage(getCodeBase(),"Image.gif"); //Bild laden Image offScreenImage=createImage(size().width,size().height);
//Bildobjektgrafiken mit der Methode createImage erstellen offScreenGC=offScreenImage.getGraphics(); //Grafikobjekt abrufen offScreenGC.drawImage(picture,0,0,this);
Farbe für öffentliche Räume (Grafik g)
{
if(ImageLoaded)
{
g.drawImage(picture,0,0,null); //Bild anzeigen, der vierte Parameter ist null, nicht dieser
showStatus("Fertig");
}
anders
showStatus("Bild wird geladen");
}
public boolean imageUpdate(Image img,int infoflags,int x,int y,int w,int h)
{
if(infoflags= =ALLBITS)
{
imageLoaded=true;
neu streichen();
return false;
}
anders
return true;
}
}
Die Analyse der Init-Methode des Applets zeigt, dass die Methode zunächst ein Bildobjekt mit dem Namen offScreenImage definiert und ihm den Rückgabewert der Methode „createImage“ zuweist. Anschließend erstellt sie ein Grafikobjekt mit dem Namen offScreenGC und weist ihm eine Grafikumgebung zu – eine Nicht-Bildschirmumgebung Bild wird dadurch erzeugt. Da hier das Off-Screen-Bild gezeichnet wird, wird im Applet-Fenster kein Bild angezeigt.
Immer wenn das Applet die Methode „drawImage“ aufruft, erstellt drawImage einen Thread, der die Methode „imageUpdate“ aufruft. Das Applet kann in der Methode imageUpdate ermitteln, wie viel vom Bild in den Speicher geladen wurde. Der von drawImage erstellte Thread ruft die imageUpdate-Methode so lange auf, bis die Methode „false“ zurückgibt.
Der zweite Parameter infoflags der imageUpdate-Methode ermöglicht es dem Applet zu wissen, wie das Bild in den Speicher geladen wird. Dieser Parameter ist gleich ImageLoaded und wird auf „true“ gesetzt und die Repaint-Methode wird aufgerufen, um das Applet-Fenster neu zu zeichnen. Diese Methode gibt schließlich „false“ zurück, um zu verhindern, dass der drawImage-Ausführungsthread die imageUpdate-Methode erneut aufruft.
Der Betrieb des Applets in der Paint-Methode wird durch die Variable ImageLoaded gesteuert. Wenn diese Variable wahr wird, ruft die Paint-Methode die drawImage-Methode auf, um das Bild anzuzeigen. Wenn die Paint-Methode die Methode drawImage aufruft, verwendet sie null als vierten Parameter, was verhindert, dass drawImage die Methode imageUpdate aufruft. Da das Bild zu diesem Zeitpunkt bereits in den Speicher geladen wurde, kann die Anzeige des Bildes im Applet-Fenster in einem Schritt abgeschlossen werden.