Till startsida för Björns studiewebb

Java Applets

Inledning

Denna sida beskriver hur man skapar en applet (med Java) som exekverar i besökarens webbläsare. Beskrivning behandlar grundläggande om applets, hur man skapar en enkel applet samt hur man skickar parametrar till applet från hemsidan.

Denna beskrivning kan komma att kompletteras med en beskrivning av hur man kommunicerar mellan en applet och en servlet.

Innehåll

Grundläggande om applets

I detta grundläggande avsnitt behandlas detaljer som är gemensamma för alla applets. Först i nästa avsnitt visas hur koden för en enkel applet ser ut.

Att skapa en applet "består" av fem steg

Skapa en Java-klass

En applet ärver från klassen Applet och brukar vanligen implementera (omdefinera) tre metoder, dock inte alla obligatoriska. Metoderna är följande (i den ordning de anropas):

Det finns även två metoder som heter start() och stop() som anropas efter init() respektive före destroy(), men dessa behandlas ännu inte på denna sida.

För att få tillgång till de klasser som behövs för att få grundläggande egenskaper för en applet måste vi importera ett antal paket. Nedan visas hur vi importerar paketen, vilka paket som behövs och hur arvet görs.

import java.awt.*;
import java.applet.*;

public class Enkel extends Applet {
  /* Definition av klass */
}

Kompilera

Om vi kompilerar vår applet i kommandotolken så skriver vi något i stil med

javac AppletNamn.java

Detta är alltså ingen större skillnad mot en vanlig Java-applikation.

Skapa en webbsida att infoga applet i

När applet kompilerats utan fel så är det dags att skapa en en webbsida som applet kan visas i. HTML-taggen för att ladda en applet är <APPLET> och har bl.a. följande attribut (av intresse)

En applet kan även hämta parametrar från webbsidan och dessa skickas m.h.a. PARAM-taggen, som placeras mellan öppnande och avslutande APPLET-tagg. Vi återkommer till appletar och parametrar längre ner på denna sida.

Nedan visas koden för hur man infogar en applet (med namnet AppletNamn) i en webbsida:

<HTML>
<BODY>
  <APPLET CODE="AppletNamn.class" WIDTH="600" HEIGHT="100">
  </APLET>
</BODY>
</HTML>

För att skicka parametrar så skriver man istället följande:

<APPLET CODE="AppletNamn.class" WIDTH="600" HEIGHT="100">
  <PARAM NAME="ParameterNamn" VALUE="VärdeFörParameter">
  <!-- Eventuella fler parametrar -->
</APLET>

Nu när vi har vår applet och vår webbsida att visa applet i är det dags att testa applet.

Testa

För att testa en applet så kan vi antingen ladda webbsidan i en webbläsare eller använda programmet appletviewer.exe (som följer med Javas SDK). För att använda appletviewer.exe så skriver vi följande (ersätt "webbsida.htm" med filnamnet för din webbsida):

appletviewer webbsida.htm

(Använder du JCreator så kan du (ska du kunna) klicka på knappen Execute Projekt, eller trycka på F5 på tangentbordet, för att köra applikationen).

Kopiera till webbserver

Om applet ska finnas tillgänglig på en webbserver så kopierar vi webbsidan och klassfilen (.class) till webbservern. Klassen för applet kopieras lämpligen till samma mapp som hemsidan den används i.

För att testa applet så behöver vi inte kopiera applet till någon server eftersom den ändå kommer att laddas ner till webbläsaren och exekveras i webbläsaren.


| Till början på sida |


Enkel applet...

I detta avsnitt skapar vi en enkel applet som visar hur många gånger metoden paint() har anropats. I denna applet finns även metoderna init() och destroy() med för att visa en "komplett" applet. Men dessa två sista metoder gör inget.

Metoden paint()

Som parameter till metoden paint() skickas ett objekt av klassen Graphics. Genom detta objekt kan vi skriva ut till applets "visuella" (synliga) yta. För att skriva text, som i denna applet, använder vi metoden drawString(). Parametrarna till metoden drawString är följande:

Utskrifter och koordinatsystemet

[ATT GÖRA: Skriv om nedanstående stycke på "riktig svenska"! ]

Koordinatsystemet i en applet bygger på att origo (position 0,0) finns i övre vänstra hörnet av applets visuella yta. Det horisontella värdet ökar mot höger och det vertikala mot botten på den visuella ytan.

Om vi vill skriva ut texten "Hej!" längst upp till vänster så skriver vi alltså följande:

g.drawString("Hej!", 0, 0);

Problemet är att texten inte kommer att synas... Vi måste nämligen ta hänsyn till storleken (höjden) på typsnittet och skriva ut texten lite längre ner för att den ska synas. På min dator blir hela texten synlig om jag istället använder följande kod (eftersom punktstorlek 12 verkar vara standard):

g.drawString("Hej!", 0, 12);

Variabeln antalVisningar

I denna enkla applet använder jag mig även av en (instans-)variabel antalVisningar för att hålla reda på hur många gånger metoden paint() har anropats. Variabeln deklareras utanför alla metoder för att göra den åtkomlig för alla metoder i klassen. I metoden paint() ökas variabeln på med ++-operatorn. I första utskriften skrivs innehållet i variabeln ut.

Koden för webbsida

<HTML>
<HEAD>
  <TITLE>En enkel applet</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>En enkel applet</H1>
<P>Denna webbsida visar en enkel applet.</P>
<HR>

<APPLET code = "Enkel.class" width = "500" height = "300" >
</APPLET>

<HR>
</CENTER>
</BODY>
</HTML>

 

Fullständiga koden för applet Enkel

import java.awt.*;
import java.applet.*;

public class Enkel extends Applet {

  /***********************************************************
  *** (Instans-)variabler
  ***********************************************************/
   int antalVisningar = 0;

  /***********************************************************
  *** Metoden init() körs när applet laddas
  ***********************************************************/
  public void init() {
    //I detta exempel gör denna metod inget.
  } //init()

  /***********************************************************
  *** Metoden paint() anropas då applet ritas om, t.ex. då
   ***  fönster dolts
  ***********************************************************/
  public void paint(Graphics g) {
     antalVisningar++;
   g.drawString("Denna applet har ritats om " + antalVisningar + 
     " gång(er).", 0, 12 );
   g.drawString("För att rita om applet måste fönstret delvis " + 
      "döljas med ett annat fönster", 50, 100);
  } //paint()

  /***********************************************************
  *** Metoden destroy() körs när applet laddas ur
  ***********************************************************/
  public void destroy(){
    //I detta exempel gör denna metod inget.
  } //destroy()

} //class Enkel


| Till början på sida |


Applet som använder parametrar

En applet hämtar parametrar från en webbsida med metoden getParameter() och som parameter till metoden skickas parameterns namn som sträng. Metoden returnerar en sträng, och som vi måste konvertera till tal om det är en sådan datatyp vi förväntar oss i parametern.

int storlek = Integer.parseInt( getParameter("Storlek") )

I HTML-koden placerar vi lika många PARAM-taggar (som det finns parametrar att skicka) mellan öppnande och avslutande APPLET-tagg. Vi använder oss av attributet NAME i PARAM-taggen för att tala om namnet på parametern och attributet VALUE för att ange värdet på parametern.

<PARAM NAME="Storlek" VALUE="15">

Om exemplet

Exemplet nedan hämtar tre parametrar från webbsidan som innehåller texten som ska skrivas ut, typsnitt för texten samt storleken för texten. Parametrarna läses i applets metod init() och placeras i (instans-)variabler så att de alltid är tillgängliga.

meddelande = getParameter("Meddelande");
typsnitt = getParameter("Typsnitt");
storlek = Integer.parseInt(getParameter("Storlek"));

Exemplet visar även hur man kan ange bakgrundsfärgen genom att anropa metoden setBackground() och skicka ett Color-objekt som parameter till metoden. Color-objektet skapa i metodanropet eftersom vi inte behöver någon variabel att referera till objektet. Konstruktorn för Color-objekt tar tre parametrar - mängden röd, grön och blå färg.

setBackground(new Color(255,255,204));

I metoden paint() börjar vi med att ange vi vilket typsnitt, stil och storlek texten ska ha genom att anropa metoden setFont() i Graphics-objektet som skickas som parameter till metoden paint(). Stilen anges genom att använda konstanten PLAIN i Font-klassen.

g.setFont(new Font(typsnitt, Font.PLAIN, storlek));

När vi angett vilket typsnitt vi vill använda kan vi sen skriva ut till applets visuella yta, precis som i exemplet ovan. 

Koden för webbsida som skickar parametrar

<HTML>
<HEAD>
  <TITLE>En applet med parametrar</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>En applet med parametrar</H1>
<P>Denna webbsida visar en applet som tar emot parametrar.</P>

<APPLET CODE ="Param.class" WIDTH="500" HEIGHT="300">
  <PARAM NAME="Meddelande" VALUE="Säg hej till publiken!">
  <PARAM NAME="Typsnitt" VALUE="Verdana">
  <PARAM NAME="Storlek" VALUE="15">
</APPLET>


</CENTER>
</BODY>
</HTML>

Fullständiga koden för applet Param 

import java.awt.*;
import java.applet.*;

public class Param extends Applet {

  /***********************************************************
  *** (Instans-)variabler
  ***********************************************************/
  private String meddelande; //Test att skriva ut 
  private String typsnitt;   //Typsnitt att visa text i 
  private int storlek;       //Storlek att visa text i

  /***********************************************************
  *** Metoden init() körs när applet laddas
  ***********************************************************/
  public void init() {

      //Hämta text och typsnitt att visa
    meddelande = getParameter("Meddelande");
    typsnitt = getParameter("Typsnitt");

      //Hämta storlek
    storlek = Integer.parseInt(getParameter("Storlek"));

    /* Eftersom alla parametrar skickas som strängar så måste de
       konverteras till int m.h.a. parseInt() som ovan */

      //Ange bakgrundsfärg för applet
    setBackground(new Color(255,255,204));
  } //init()

  /***********************************************************
  *** Metoden paint() anropas då applet ritas om, t.ex. då
   ***  fönster dolts.
  ***********************************************************/
  public void paint(Graphics g) {

      // Ange typsnitt, stil och storlek som ska användas 
    g.setFont(new Font(typsnitt, Font.PLAIN, storlek));

      // Skriv ut texten
    g.drawString(meddelande, 50, 50);

  } //paint()

} //class Param


| Till början på sida | Tillbaka till Java |