# Applet in Applet aufrufen und steuern



## Gonzo (17. Jun 2004)

Hallo,

wie kann man in Java in einem Applet ein anderes bzw. andere Applets aufrufen ???
Und diese dann steuern, sprich starten, beenden, neu starten ???

 :bahnhof: 

Bitte um Hilfe.
Danke im vorraus.


----------



## Illuvatar (17. Jun 2004)

Es gibt die Methode Applet#getAppletContext, über diese Klasse kann man dann ein Array aller Applets auf der Seite kriegen.


----------



## L-ectron-X (17. Jun 2004)

Da Applets in Webseiten eingebettet sind, müsste man, um ein anderes Applet zu starten eine andere Webseite laden. Wenn mehrere Applets in einer Webseite eingebettet sind, können sie sich gegenseitig instanziieren, oder über den AppletContext kommunizieren. Manchmal müssen einige Methoden auch static gemacht werden.
Vielleicht könntest Du Deine Frage noch etwas genauer formulieren?


----------



## Gonzo (17. Jun 2004)

Schon mal danke.

Ich möchte das erste Applet über eine WebSite laden.
Dieses Applet soll eine Art "Karteikartenoberfläche" darstellen,
über die ich mittels Reitern navigieren kann.

Auf den Karteikarten sollen sich unterschiedliche Applets befinden.
Wenn ich nun zwischen den einzelnen Reitern / Kareikarten wechsel,
soll sich das Applet auf der gewählten Karte neu laden,
und die Applets der anderen Karten beendet werden.

Ich hoffe das hilft weiter.

 :?


----------



## Gonzo (17. Jun 2004)

Nochmal die Frage:

Wie kann ich nun auf diesen TabbedPanes weitere Applets platzieren,
und mittels der Reiterauswahl steuern ?


----------



## L-ectron-X (17. Jun 2004)

Das hängt auch davon ab, wie Du die einzelnen Applets ansteuern willst.
Wird das auch über das Applet erledigt, oder per Grafik in der Webseite?

:idea: Das wäre vielleicht auch eine ganz einfache Sache. Du könntest ein Frameset bauen. In einem Frame sind die Grafiken der Reiter der "TabbedPane". Im anderen werden nach dem Klick auf eine Grafik die Seiten mit den Applets geladen. Wenn Du Werte aus den Applets retten möchtest, bevor sie gestoppt werden, kannst Du die z.B. in einer statischen Klasse so lange aufbewahren, bis sie wieder (start()) benötigt werden. Nur eine Idee...

Schreibst Du ein JApplet oder ein AWT-Applet?
Bei einem JApplet kann das alles entfallen, da kann eine javax.swing.JTabbedPane eingebaut werden.


----------



## Gonzo (17. Jun 2004)

Ich schreibe ein JApplet.

Ich möchte, dass die Applets über die Reiter(sprich auch über das Applet ["Main-Applet"])
gesteuert werden.

Werte müssen eigentlich nicht behalten werden.

Eigentlich ist das ein guter Tip !!! Danke.
Wäre wohl ne gute Lösung.

Linkes Frame :        Appletsteuerung
Rechtes Frame:        Aufruf der Applets

Werden dann durch die Aufrufe der Links im linken Fenster die Applets automatisch gestoppt
und gestartet oder muss ich das dann noch selbst programmieren ???

Danke für die große Hilfe.

 :toll:


----------



## L-ectron-X (17. Jun 2004)

Du brauchst die stop()-Methode nur überschreiben, wenn Du noch bestimmte Dinge erledigen willst, sobald das Applet außerhalb des sichtbaren Bereichs ist. Sonst ist es nicht nötig. Bei der start()-Methode müsstest Du mal gucken, ob irgendwelche Prozesse nach der Rückkehr zu einer Seite wieder in Gang gesetzt werden müssen.
destroy() überschreibst Du dann eben auch nur, wenn noch etwas erledigt werden soll, sobald Du das Browserfenster zu machst.


----------



## Gonzo (17. Jun 2004)

:toll:


----------



## Gonzo (23. Jun 2004)

Ich bins wieder... 

Ich habe jetzt das Ganze versucht über ein Frameset zu lösen.

 :!: 
Problem ist jetzt nur, dass ich jetzt zwischen den Applets nicht mehr kommunizieren kann,
da sie ja nicht mehr in einer html-seite liegen, sondern im frameset, und sich deshalb
per AppletContext nicht mehr aufrufen lassen...
 :!: 

Oder geht das doch irgendwie und ich weiss mal wieder nur nicht wie ?????


----------



## L-ectron-X (23. Jun 2004)

Du kannst in dem Steuerframe (Navigation) ein Applet einsetzen, welches die Kommunikation zwischen den Applets verwaltet bzw. die Werte zwischen speichert. Die Zugriffs-Methoden dieses Applets müssen aber static sein, da bei Instanzbildung jedes Mal ein anderes Objekt erzeugt werden würde und man so immer auf ein anderes Objekt zugreifen würde.

Das Problem hatte ich hier aber schon weiter oben befürchtet, da war es Dir aber noch egal... :wink:

Auf diese Weise habe ich auch schon mal die Kommunikation zwischen mehreren Applets über mehrere Seiten hinweg aufrecht erhalten können. Ob es allerdings noch eine andere, möglicherweise elegantere Lösung gibt, entzieht sich aber meiner Kenntnis.

Da Du ja ein JApplet programmierst, kannst Du immer noch eine JTabbedPane in nur _ein_ Applet einbauen, falls Du mit der Lösung nicht zufrieden bist.


----------



## Gonzo (24. Jun 2004)

Danke erstmal für die Antwort.

Ich verstehe nur noch nicht, was ich in dem Verwaltungsapplet in der Navi speichern bzw. verwalten muss, dass er die anderen Applets in den unterschiedlichen Frames findet bzw. ansprechen kann !??!?! Da diese sich ja immer noch in ner anderen .htm befinden ! Oder ging's in der Lösung nur um die Werteübergabe !?


----------



## L-ectron-X (24. Jun 2004)

Meine Antwort bezog sich auf die Übergabe der Werte zwischen den Applets untereinander.
Das Verwaltungs-Applet im Navigationsframe müsste statische Methoden enthalten, weil Du in Deinem Fall bei einer Instanziierung jedesmal mit einer anderen Referenz arbeiten würdest.
Deine Applets in den anzuzeigenden Seiten melden sich quasi bei Ihrem Start beim Verwaltungs-Applet an und holen sich die dort gespeicherten Werte.
Falls das nicht die Antwort auf Deine Frage war, müsstest Du mal Dein Problem genauer beschreiben.
Welche Art Kommunikation zwischen den Applets meinst Du?


----------



## Gonzo (24. Jun 2004)

L-ectron-X hat gesagt.:
			
		

> Das Verwaltungs-Applet im Navigationsframe müsste statische Methoden enthalten, weil Du in Deinem Fall bei einer Instanziierung jedesmal mit einer anderen Referenz arbeiten würdest.



Es ist mir klar das ich statische Methoden nehmen muss.

NUR,  :wink: jetzt kommt mein Problem,
da sich bspw. das Verwaltungsapplet in Bezug auf das aufrufende Applet in einem anderen FRAME befindet,
kann ich es ja nicht aufrufen !!!
Oder doch ?
Wenn ich wüsste wie ich die Applets in unterschiedlichen Frames kommunizieren können,
wäre mein Problem wohl gelöst.

Ich hoffe ich habe mich verständlich ausgedrückt. Sorry.


----------



## L-ectron-X (24. Jun 2004)

Alle Applets arbeiten doch mit der gleichen VM. Warum sollte es da nicht möglich sein, dass Deine "TabbedPane"-Applets mit dem Verwaltungs-Applet kommunizieren? Wichtig ist nur, dass ein Applet ständig erreichbar ist, ähnlich der Vermittlungsstelle einer Telefongesellschaft.
Falls Du immer noch Fragen hast, komm doch mal in den Chat, da können wir das auch klären.


----------



## Gonzo (24. Jun 2004)

:cry: 

Erstmal danke, dass du dich so um mich kümmerst.  :wink: 

Chatten kann ich momentan leider nicht, sorry. 4bidden.

Aber mein Problem ist immer noch da.
Das Prinzip (Telefonvermittlung..) ist mir klar.

Ich hab nur ein Problem mit dem Aufruf/Kommunikation. Kann es mir gerade nicht vorstellen.

Könnte ich dann mit folgendem Code, eine Funktion auf dem geladenen AppletX in FrameX
aus meinem Steuerapplet in FrameY aufrufen, obwohl sie nicht auf der gleichen .html-Seite sind  ????



```
...
	AppletContext ac = getAppletContext();
	AppletX a = (AppletX)ac.getApplet("nameappletx");
	a.function(...);
```


----------



## L-ectron-X (24. Jun 2004)

API-Documentation hat gesagt.:
			
		

> public interface AppletContext
> 
> This interface corresponds to an applet's environment: the document containing the applet and the other applets in the same document.
> 
> The methods in this interface can be used by an applet to obtain information about its environment.


Was soviel heißt wie:
Dieses Interface korrespondiert mit der Umgebung eines Applets: das Dokument beinhaltet das Applet und die anderen Applets in ein und dem selben Dokument.

Die Methoden in diesem Interface können von einem Applet zur Erlangung von Informationen über die Umgebung des Applets benutzt werden .


Da Deine Applets nicht in der gleichen HTML-Seite liegen, nutzt Dir also der AppletContext nichts.
Eingaben, die in den einzelnen Applets gemacht werden, solltest Du via statischer Methode an das Verwaltungs-Applet im Navigationsframe übergeben. Wenn Du nun durch Klick in Deiner Navigation eine andere Seite in den Browser lädst, kannst Du via start()-Methode des eben geladenen Applets die im Verwaltungs-Applet hinterlegten Daten abholen.

Das funktioniert, ich habe es wie oben schon beschrieben bereits schon mal so gemacht.
Ganz einfach kann das so aussehen:

```
Verwaltung.datenUebergeben(einObjekt);
```
und

```
einObjekt = Verwaltung.datenHolen();
```


----------



## Gonzo (24. Jun 2004)

Sag ich doch.  :wink:  Also geht es nicht.

Ich müsste nämlich vom VerwaltungsApplet dem anderen AppletX ab und zu ,
bei Klicks im anderen AppletY, Informationen weiterreichen. Und das nicht nur dann, wenn AppletX geladen wird und sich Informationen holt.

Ich könnte höchstens nen Timer in AppletX einbauen, der immer nachschaut, ob Infos für AppletX vorhanden sind oder nicht. Das wäre aber glaube ich nicht so elegant und sparsam...

Trotzdem danke für dein Bemühen.


----------



## L-ectron-X (24. Jun 2004)

Hm, dann verstehe ich Dein Vorhaben nicht ganz.
Du kannst doch in Deinem Beispiel immer nur ein Applet anzeigen und darin arbeiten. Also kannst/musst Du doch beim Laden eines beliebigen Applets die hinterlegten Daten holen und damit die Kommunikation sicher stellen. ???:L


----------



## Gonzo (24. Jun 2004)

Nein, nicht ganz.

Im "linken" Teil des Fensters soll ein Applet laufen, das von mehreren Applets genutzt wird.
Im "rechten" Teil des Fensters sollen mehrere Applets laufen können.
Über die Reiter soll man die Applets im rechten Fensterteil auswählen können.
Wenn man dann links im Applet eine Auswahl macht, sollen dementsprechen in das jeweils
geladene Applet auf der rechten Seite Infos übermittelt werden.


----------



## L-ectron-X (24. Jun 2004)

Also ich sehe da erst mal kein Problem dabei. Vielleicht dann, wenn ich es mal vor mir sehe.
Kann man das Applet irgendwo bewundern bzw. sich den Quellcode herunterladen?
Ich würde es mir gerne mal ansehen, damit ich mir einen Eindruck davon verschaffen kann. Vielleicht bekommen wir dann das Problem vom Tisch. :wink:


----------



## Gonzo (24. Jun 2004)

Du verwirrst mich langsam richtig.  

:roll: 

--PAUSE--

Meld mich morgen wieder,
muss was ausprobieren... 

:lol:


----------



## Gonzo (24. Jun 2004)

Ich glaub ich hab's voll verrafft, was ich da erzählt hab.

 

Probiers heut abend aus, und bedank mich dann morgen bei dir, wenn's funktioniert...

 :bae:


----------

