package elte.java2_utikalauz5.applet;
/**
Azonos HTML lapon található appletkommunikációt szemléltető példaprogram.
@link.forrásfájl {@docRoot}/../data/applet/src KommunikacioTeszt.java
@link.letöltés {@docRoot}/../data/applet KommunikacioTeszt.jar
@since Java Útikalauz programozóknak
*/
public class KommunikacioTeszt extends java.applet.Applet
implements java.awt.event.ActionListener {
/** Verziószám. */
private final static long serialVersionUID = 15L;
/** Példányszámláló */
private static int példányszámláló;
/** Példány azonosító */
private transient int példányazonosító;
/** Indításszámláló */
private transient int indításszámláló;
/**
Üzenet megjelenítése külön ablakban.
@param szöveg a megjelenítendő üzenet
*/
private void üzen( String szöveg ) {
java.awt.TextArea üzenet = new java.awt.TextArea(szöveg);
final java.awt.Frame üzenőablak = new java.awt.Frame("Infó");
üzenőablak.add(üzenet);
üzenőablak.addWindowListener( new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent we) {
üzenőablak.dispose(); //ablak bezárása
}
});
üzenet.setEditable(false);
üzenőablak.setSize(400, 300);
üzenőablak.setVisible( true );
}
/** információs címke */
transient java.awt.Label címke = new java.awt.Label();
/** paraméternév beviteli szövegmező */
transient java.awt.TextField paraméternév = new java.awt.TextField("name", 20);
/** paraméterértéket lekérdező nyomógomb */
transient java.awt.Button paramétergomb = new java.awt.Button("getParameter");
/** appletek listája */
transient java.awt.List appletlista=new java.awt.List(10, false);
/** appletlistát megjelenítő gomb */
transient java.awt.Button listagomb=new java.awt.Button("getApplets");
/** aktuális appletlista */
private transient java.util.Vector appletek =
new java.util.Vector();
/** grafikus felületet felépítő konstruktor */
public KommunikacioTeszt() {
synchronized(getClass()) {
példányazonosító = ++példányszámláló; //appletpéldányok számlálása
}
java.awt.Panel panel = new java.awt.Panel(); //alsó panel
paramétergomb.addActionListener(this); //eseménykezelők regisztrálása
listagomb.addActionListener(this);
appletlista.addActionListener(this);
panel.add(listagomb); //felület felépítése
panel.add(paraméternév);
panel.add(paramétergomb);
setLayout(new java.awt.BorderLayout());
add(java.awt.BorderLayout.NORTH, címke);
add(appletlista);
add(java.awt.BorderLayout.SOUTH, panel);
}
/**
Applet leírása
@return Az applet leírása és azonosító neve
*/
@Override
public String getAppletInfo() {
return "Azonos HTML lapon található appletek kommunikációs lehetőségét"+
" szemléltető applet: "+this;
}
/**
Applet szöveges formája
@return Az applet rövid neve és azonosítója
*/
@Override
public String toString() {
return getClass().getSimpleName()+példányazonosító;
}
/** Applet indítása */
@Override
public void start() {
java.io.InputStream adat = getAppletContext().getStream(
getClass().getSimpleName());
int számláló = 0; //indítási számláló beolvasása
if (adat!=null) {
java.io.DataInputStream dis = null;
try {
dis = new java.io.DataInputStream(adat);
számláló = dis.readInt();
} catch (java.io.IOException ioe) {}
finally {
if (dis!=null) try {
dis.close();
} catch (java.io.IOException ioe2) {}
}
}
számláló++; //számláló növelése
címke.setText(this+" / startszámláló="+számláló); //és kiírása
java.io.ByteArrayOutputStream baos =new java.io.ByteArrayOutputStream();
java.io.DataOutputStream dos = new java.io.DataOutputStream( baos );
try { //új érték átadása a böngészőnek
dos.writeInt(számláló);
adat = new java.io.ByteArrayInputStream(baos.toByteArray());
getAppletContext().setStream(getClass().getSimpleName(), adat);
} catch (java.io.IOException ioe) {}
finally {
if (dos!=null) try {
dos.close();
} catch (java.io.IOException ioe2) {}
}
}
/**
Nyomógomb megnyomásakor eseménykezelés.
@param esemény A gombnyomást reprezentáló eseményobjektum.
*/
public void actionPerformed(java.awt.event.ActionEvent esemény) {
if (esemény.getSource()==listagomb) { //appletlista felépítése
appletek.clear();
appletlista.removeAll();
appletek.addAll(
java.util.Collections.list(getAppletContext().getApplets()));
for (java.util.Iterator iter =
appletek.iterator(); iter.hasNext();) {
java.applet.Applet applet = iter.next();
if (applet==null) iter.remove(); //érvénytelen appletreferencia
else appletlista.add( applet.toString() );
if (applet == this) //saját maga kiválasztása
appletlista.select( appletlista.getItemCount()-1 );
}
} else if (esemény.getSource()==paramétergomb) { //appletről paraméterek
java.applet.Applet applet = appletlista.getSelectedIndex()<0 ? this:
appletek.elementAt(appletlista.getSelectedIndex());
üzen(applet+".getParameter("+paraméternév.getText()+")=\n"+
applet.getParameter(paraméternév.getText()));
} else if (esemény.getSource()==appletlista) { //listaelem kiválasztása
java.applet.Applet applet = //kiválasztott appletről információk
appletek.elementAt(appletlista.getSelectedIndex());
üzen(applet+".getAppletInfo()=\n"+applet.getAppletInfo());
}
}
}