//----------------------------------------------------------------------------------
// AppletApplicationGUIDemo2.java
//----------------------------------------------------------------------------------
//Das Setzen des ImageFactory-Objekts erfolgt jeweils in init() bzw. in main():
package test;
import java.applet.Applet;
import java.awt.*;
public class AppletApplicationGUIDemo2 extends Applet {
// Aufruf beim Start als Applikation
public static void main(String args[]) {
Frame f = new Frame("An universal program");
// Hinzufügen des Panels zum Frame
f.add("Center",
new ComponentPanel(new ApplicationFactory()));
// Setzen der Größe und Anzeigen des Frames
f.setSize(300, 200);
f.show();
}
// Aufruf beim Start als Applet
public void init() {
// Festlegen der Größse
setSize(300, 200);
// Hinzufügen des Panels zum Applet
setLayout(new BorderLayout());
add("Center",
new ComponentPanel(new AppletFactory(this)));
}
}
class ComponentPanel extends Panel {
ImageFactory factory;
Image img;
public ComponentPanel(ProgramFactory factory) {
// Speichern des Factory-Objektes
this.factory = factory;
img = factory.getImage("test.gif");
}
public void paint(Graphics g) {
g.drawImage(img,0,0,this);
}
}
/* Fehlerhaftes Orginal
class ImagePanel extends Panel {
ImageFactory factory;
Image img;
public ComponentPanel(ProgramFactory factory) {
// Speichern des Factory-Objektes
this.factory = factory;
img = factory.getImage("test.gif");
}
public void paint(Graphics g) {
g.drawImage(img,0,0,this);
}
}
*/
//----------------------------------------------------------------------------------
// AppletFactory.java
//----------------------------------------------------------------------------------
//Für ein Applet könnte die Implementierung dieses Interface folgendermaßen aussehen:
package test;
import java.applet.Applet;
import java.awt.*;
public class AppletFactory extends ProgramFactory {
protected Applet applet;
public AppletFactory(Applet applet) {
this.applet = applet;
}
public Image getImage(String image) {
return applet.getImage(applet.getCodebase(),image);
}
}
//----------------------------------------------------------------------------------
// ApplicationFactory.java
//----------------------------------------------------------------------------------
//Dasselbe Interface könnte man ebenfalls für eine Applikation implementieren:
package test;
import java.applet.Applet;
import java.awt.*;
public class ApplicationFactory extends ProgramFactory {
public Image getImage(String image) {
return Toolkit.getDefaultToolkit().getImage(image);
}
}
//----------------------------------------------------------------------------------
// ProgramFactory.java
//----------------------------------------------------------------------------------
//Folgende Klasse definiert eine Schnittstelle für das Laden von Bildern:
package test;
import java.applet.Applet;
import java.awt.*;
public class ProgramFactory {
public abstract Image getImage(String location);
}
//----------------------------------------------------------------------------------