Komunikace JAVA appletu s HTML stránkou

25. října 2000

Pokud programujete JAVA applety, možná byste rádi věděli, jak může komunikovat JAVA applet s HTML stránkou. V dnešním příkladě si ukážeme, jak na to pomocí JavaScriptu.

Je to poměrně jednoduché. V DOM (Document Object Model) jsou applety přístupné buď pomocí atributu name tak jako jiné elementy stránky nebo v poli applets (jako pole obrázků – images). To znamená, že applety jsou přístupné JavaScriptu. Přístupné jsou všechny public metody appletu. Volat takovouto metodu můžeme takto document.jmeno_appletu.public_metoda. Jak vidíte, je to jednoduché.

Ale musíte si dát pozor na jednu věc. Nesmíte zapomenout, že HTML stránka může být natažena v prohlížeči, ale applet se může ještě stahovat/inicializovat. Proto před si před voláním metod appletu zkontrolujeme zda applet běží. Třída applet má public metodu IsActive(), která říká, zda je applet v běhu. Pomocí ní si ověříme, že je applet inicializován. Musíme si také zkontrolovat, zda je applet již stažen. To uděláme pomocí dotazu na object appletu.

Pro demonstraci si napíšeme jednoduchý applet, který umí pouze zobrazit text. Metodu, přes kterou budeme do appletu vkládat text, jsem pojmenoval setText.

import java.applet.Applet;
public class showtext extends Applet{
String mainText,mainText2;

public void init(){
this.setFont(new java.awt.Font("Helvetica",0,16));
mainText=new String();
mainText2=new String();
}

public void setText(String mainText){
this.mainText=mainText;
repaint();
}

public void setText(String mainText,String mainText2){
this.mainText=mainText;
this.mainText2=mainText2;
repaint();
}

public void update(java.awt.Graphics g){paint(g);}

public void paint(java.awt.Graphics g){
g.setColor(java.awt.Color.gray );
g.fillRect(0,0,this.size().width,this.size().height);
g.setColor(java.awt.Color.black);
g.drawString(mainText + mainText2,0,16);
}
}

Pro kontrolu, zda je applet stažen a inicializován, si napíšeme funkci checkApplet(), kterou spustíme při natažení stránky pomocí události onLoad – <BODY onLoad="checkApplet();"> Funkce si do proměnné aApplet1 uloží referenci na applet, který se v našem příkladu jmenuje Applet1. Pokud má tato proměnná hodnotu null, applet není ještě stažen nebo uživatel nemá povoleno provádění Javy. Pokud je hodnota různá od null(applet je stažen), provede se kontrola, zda již applet běží dotazem na metodu appletu isActive(). Pokud již JVM překompilovala applet a spustila jej, vrací se metoda true. Pokud je tedy applet spuštěn, nastavíme si proměnou appletRunnig na true, aby jsme při dalších přístupech na applet nemuseli se znovu dotazovat appletu, zda je spuštěn. Pokud není applet, spuštěn běží funkce checkApplet v 250ms smyčce.

Pro volání public metody setText našeho ukázkového appletu si napíšeme funkci Text2Applet, která si pouze ověří, zda-li applet běží a pak předá text, který dostala jako parametr do appletu. 

var timerID = null;
var appletRunning = false;
function checkApplet(){
var aApplet1 = document.Applet1;
if (aApplet1 != null) {
if (aApplet1.isActive() == true)
appletRunning = true;
}
if (!appletRunning)
timerID = setTimeout(‚checkApplet()‘, 250);
}

function Text2Applet(msg) {
if (appletRunning == true) {
 document.Applet1.setText(msg);
}
}

Při předávání parametrů do funkcí si musíte dávat pozor na 2 věci

  1. Nevolat přetěžované funkce, na základě vlastních zkušeností vím, že většinou dochází k volání funkce s nejnižším počtem parametrů daného jména. Liší se to podle verze prohlížeče a jeho JVM.

  2. Parametry typu String, float a boolean jsou předávány bez problému. Ostatní je potřeba konvertovat.

Pro demonstraci použijeme funkce uvedené výše a navíc tento kód:

<form>
<table border="0" cellspacing="0">
<tr>
<td colspan="3" align="center">
<APPLET code=showtext.class height=30 name=Applet1 width=100 MAYSCRIPT>
<param name="bgcolor" value="#FFD700">
[JAVA APPLET] </APPLET>
</td>
</tr>
<tr>
<td><input type=button value="Java" onClick=’Text2Applet("Java ")‘></td>
<td><input type=button value="JavaScript – Volaní přetížené funkce" onClick=’Text2Applet("JavaScript ","1")‘></td>
<td><input type=button value="Vymazat text" onClick=’Text2Applet("")‘></td>
</tr>
</table>
</form>

Jak sami v ukázce zjistíte, po stisknutí tlačítka "JavaScript – Volaní přetížené funkce", nedojde k vypsání textu "JavaScript 1", ale "JavaScript". Tolik k volání přetěžovaných metod.

A to je pro dnešek vše.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *