eine Klasse sowohl als Applet als auch als Applikation

uweb

Grünschnabel
Hi,

auf

http://www.dpunkt.de/java//Programmieren_mit_Java/Applets_und_Applikationen/12.html

habe ich zwei Beispiele gefunden wie man eine Klasse sowohl als Applet als auch als Applikation laufen lassen kann. Beide Beispiele laufen bei mir.

Auf der gleichen Seite wird aber auch beschrieben wie man das 2. Beispiel (AppletApplicationGUIDemo) erweitern muß um eine Klasse zu erzeugen, die eine Schnittstelle für jene Methoden enthält, die bei Applets und Applikationen unterschiedlich sind.

Und genau das bekomme ich nicht hin. Ich habe mehrer Versionen erzeugt die mit unterschiedlichen Fehlermeldungen quitiert werden (würde den Rahmen hier sprengen).

Es wäre toll wenn sich jemand erbamen würde.

Danke

Uwe
 
Hallo !

Ja, das dachte ich auch.
Aber, es ist schon lange her, dass wir in der Schule mit Java gearbeitet haben. Und offensichtlich habe ich schon mehr darüber vergessen als ich noch weiss.

In meiner letzten Version hatte ich zahlreiche "cannot resolve symbol ....".

Gegenfrage : Hast Du es ausprobiert ?
( Wenn "Ja" : Würde es Dir etwas ausmachen den Code hier zu posten ? )

Danke

Uwe
 
Hallo!

Code:
import java.applet.Applet;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/*
 * Created on 12.04.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class AppApplet extends Applet {

	private Frame frm;
	private Button btnClose;

	private boolean isInAppMode;

	public static void main(String[] args) {
		new AppApplet().init2().start();
	}
	/* (non-Javadoc)
	 * @see java.applet.Applet#init()
	 */
	public void init() {
		// TODO Auto-generated method stub
		super.init();
		frm = new Frame("AppApplet");
		frm.setSize(320, 240);
		btnClose = new Button("close");
		btnClose.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				frm.setVisible(false);
				frm.dispose();
			}

		});
		frm.add(btnClose);

	}

	public Applet init2() {
		isInAppMode = true;
		init();
		return this;
	}

	/* (non-Javadoc)
	 * @see java.applet.Applet#start()
	 */
	public void start() {
		// TODO Auto-generated method stub
		super.start();
		frm.show();
	}

}

Gruß Tom
 
Super,

vielen Dank.

Jetzt habe ich immerhin eine funktionstüchtige Variante.
Allerdings wird im Applet ein Frame erzeugt.

Bei der Umsetzung des Beispiels hätte die Ausgabe im Applet-Bereich erfolgen sollen. Gerade die Erweiterung hätte des Beispiels hätte mich interessiert.

Hier habe ich einen meiner Versuche (den mit "cannot resolve symbol") :

Code:
//----------------------------------------------------------------------------------
//   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);
}

//----------------------------------------------------------------------------------
DANKE im voraus.

Uwe
 

Neue Beiträge

Zurück