Prawo Zymurgyego - ludzie są zawsze chętni do pracy w czasie przeszłym.
Część 4.1. Applety - wprowadzenie

Przypomnij sobie nasz pierwszy program, który pisaliśmy na początku tego kursu. Wyglądał on tak:

class PierwszyProgram
{	public static void main (String args[])
	{	System.out.println("Mój pierwszy program");
	}
}

Ten sam program zrobiony jako applet będzie natomiast miał taki wygląd:

import java.applet.Applet;
import java.awt.Graphics;

public class PierwszyApplet extends Applet 
{  public void paint(Graphics g) 
   {  g.drawString("Mój pierwszy program", 50, 25);
   }
}

Umieszczenie appletu na stronie WWW wymaga dodania znacznika <APPLET> . . . </APPLET>. Umieszczenie naszego appletu na stronie będzie wyglądało następująco:

<APPLET CODE="nazwa.class" WIDTH=x HEIGHT=y>
    <PARAM NAME="NazwaParametru1" VALUE="WartośćParametru1">
    ..... 
</APPLET>

gdzie znacznik <APPLET> posiada między innymi atrybuty:

  • CODE - określający nazwę pliku z kodem bajtowym apletu;
     
  • WIDTH i HEIGHT - podające początkowa szerokość i wysokość okna na stronie WWW, w którym applet będzie wykonywany;
     
  • CODEBASE - określający ścieżkę do katalogu zawierającego plik z kodem bajtowym apletu.
     
Jeżeli applet wymaga parametrów, to możemy je podać w kolejnych znacznikach <PARAM>, gdzie każdy opisuje jeden parametr podając dla niego:
  • NAME - nazwę parametru wymaganego przez applet;
     
  • VALUE - wartość przypisaną do tego parametru.
     

Ponieważ nasz applet jest bardzo prosty i nie wymaga żadnych parametrów, to umieszczenie go na stronie będzie wyglądało następująco:

<APPLET CODE="PierwszyApplet.class" WIDTH=150 HEIGHT=25></APPLET>

A tak będzie wyglądał nasz applet wstawiony na stronę WWW:

Każdy applet dziedziczy z klasy java.applet.Applet wymaga więc dołączenia tego pakietu do kompilowanego programu. Nasz applet zawsze będzie dziedziczył po klasie Applet z pakietu java.applet.

Jeżeli dodatkowo chcemy cokolwiek w applecie pisać lub rysować, to musimy dołączyć pakiet java.awt.Graphics zawierający klasy umożliwiające rysowanie i pisanie w appletach.

Jak widać nasz applet nie posiada metody main. Sterowanie appletem odbywa się zupełnie inaczej, niż standardową aplikacją (zobacz funkcje specjalne w appetach). Typowa struktura appletu napisanego w Javie wygląda ta:

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

public class NazwaAppletu extends Applet implements Runnable
{
   ... deklaracja zmiennych programu ...

  public void init() 
  { .....
    // działania, które mają być wykonane podczas ładowania programu 
    .....
  }

  public void start() 
  { .....
    // działania wykonane przy każdorazowym uruchomieniu programu 
    .....
  }

  public void stop()
  { .....
    // działania wykonane przy zatrzymaniu programu 
    .....
  }

  public void destory()
  { .....
    // działania wykonane przy usuwaniu programu z pamięci 
    .....
  }

  public void paint(Graphics g) 
  { .....
    // wyświetlenie grafiki programu 
    .....
  }

  public void run()
  { .....
    // opis działania wątku programu
    ..... 
  } 

  .....
       własne metody programu
  .....
} 

Oczywiście - co widać w naszym applecie - nie wszystkie metody muszą wystąpić. Powyższa struktura opisuje pełne możliwości budowania appletów w Javie. W wieli przypadkach używamy tylko niektórych spośród specjalnych metod appletów, gdyż działanie metod dziedziczonych z klasy Applet jest w zupełności wystarczające.

Na zakończenie tej części applet prezentujący użycie funkcji specjalnych oraz uwidaczniający czas życia programu. Przy przechodzeniu do innych okien i powrocie do bieżącego powinieneś zaobserwować zmianę wartości wyświetlanych zmiennych. Oto kod programu:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Font;

public class Cykl extends Applet 
{ private int iInit, iStart, iStop, iDestroy, iPaint;
 private Font font;           
             // klasa umożliwiająca definiowanie używanych w applecie czcionek

 public void init() 
 {   font = new Font("Arial", Font.BOLD, 14);
     iInit = dodajInfo(iInit);
 }

 public void start() 
 {   iStart = dodajInfo(iStart);
 }

 public void stop()
 {   iStop = dodajInfo(iStop);
 }

 public void destroy()
 {   iDestroy = dodajInfo(iDestroy);
 }

 int dodajInfo(int i)
 {   repaint();
     return ++i;
 }

 public void paint(Graphics g) 
 {   g.setFont(font);
         // rysowanie ramki wokół appletu
     g.drawRect(0, 0, size().width - 1, size().height - 1);
         // wyświetlenie wartości wszystkich zmiennych appletu
     g.drawString("Inicjalizacji", 10, 20);   g.drawString(""+iInit,      200, 20);
     g.drawString("Uruchomień",    10, 40);   g.drawString(""+iStart,     200, 40);
     g.drawString("Zatrzymań",     10, 60);   g.drawString(""+iStop,      200,  60);
     g.drawString("Usunięć",       10, 80);   g.drawString(""+iDestroy,   200,  80);
     g.drawString("Rysowań",       10,100);   g.drawString(""+(++iPaint), 200, 100);
 }
}

A oto i sam applet w działaniu:

« wstecz   dalej »