background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 1 

 

4. Pakiet 

java.applet

 

 

4.1 Pakiet 

java.applet

 

4.2 Apletowe API 

 

4.1 Pakiet 

java.applet

 

Aplet  jest 

niesamodzielnym  programem

,  doł

ą

czanym  do  innej  (ale 

specjalizowanej)  aplikacji,  w  rodzaju  przegl

ą

darka  internetowa  (stanowi 

ona kontekst dla apletu).  
Ka

Ŝ

dy aplet tworzony jest jako 

klasa pochodna

 od klasy 

Applet

.  

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 2 

1) Klasa 

java.applet.Applet  

 

Deklaracja 

public class Applet extends java.awt.Panel  

 
Implementowane interfejsy:  



 

javax.accessibility.Accessible 

(przez

 Panel

),

  



 

java.awt.image.ImageObserver

java.awt.MenuContainer i  
java.io.Serializable 

(przez

 Component

). 

 

public interface Accessible 

– interfejs wyznacza jedn

ą

 metod

ę

:  

AccessibleContext 

getAccessibleContext()

 

– 

zwraca 

obiekt 

typu  

AccessibleContext

,  zwi

ą

zany  z  zadanym  obiektem  i  zawieraj

ą

cy 

informacje  o  obiekcie  i  jego  mo

Ŝ

liwo

ś

ciach  –  np.  o  wykonywanych 

akcjach, jego graficznej reprezentacji, selekcji komponentów potomnych, 
prezentacji edytowalnego tekstu. 
 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 3 

 Klasa zagnie

Ŝ

d

Ŝ

ona w klasie

 

Applet

:

 

 

protected class Applet.AccessibleApplet  extends Panel.AccessibleAWTPanel 

Ta  klasa  implementuje  mechanizm  informowania  o  obiekcie  apletu  (np. 
jego stanie i roli) oraz jego mo

Ŝ

liwo

ś

ciach.  

 

 

public interface ImageObserver 

– interfejs wyznacza jedn

ą

 metod

ę

:  

 

boolean 

imageUpdate(Image img, int infoflags, int x, int y, int width, int he); 

Ta 

metoda 

wywoływana 

jest 

celu 

obserwacji 

post

ę

pu 

asynchronicznego ładowania obrazu. 

 

 

public  interface  MenuContainer

  – 

bazowy  interfejs  dla  wszystkich 

kontenerów zawieraj

ą

cych menu. 

 

 

public  interface  Serializable

 

–  pusty  interfejs,  który  wskazuje  na 

mo

Ŝ

liwo

ść

  serializacji  obiektu.  Klasa  mo

Ŝ

e  (ale  nie  musi) 

implementowa

ć

 metody: 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 4 

private void writeObject(java.io.ObjectOutputStream out) throws IOException 
private void readObject(java.io.ObjectInputStream in)  throws IOException, 
ClassNotFoundException; 

 

 

Konstruktor klasy 

Applet

:  

public Applet()   throws HeadlessException ; 

Wyj

ą

tek  zgłaszany  jest  w  sytuacji,  gdy  aplet  wołany  jest  w 

ś

rodowisku 

nie 

dysponuj

ą

cym 

urz

ą

dzeniami 

wprowadzania 

danych 

przez 

u

Ŝ

ytkownika. 

 
Obok klasy 

Applet

 pakiet 

java.applet

 zawiera te

Ŝ

 

3 interfejsy

 



 

public  interface  AppletContext

  –  wyznacza  metody  dla  pobrania 

informacji  o 

ś

rodowisku  wykonania  apletu,  czyli  o  dokumencie  HTML, 

zawieraj

ą

cym  dany  aplet,  i  informacje  o  innych  apletach  tego 

dokumentu. Wyznacza nast

ę

puj

ą

ce metody: 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 5 

 

Applet getApplet(String name)

  –  pobiera  aplet  o  podanej  nazwie  znajdujący 

się w kontekście danego apletu;  
 

Enumeration  getApplets()

  –  znajduje  wszystkie  aplety  znajdujące  się  w 

kontekście danego apletu;  
 

AudioClip 

getAudioClip(URL url)

 – tworzy klip dźwiękowy; 

 

Image  getImage(URL url)

 – tworzy obiekt dla pliku graficznego; 

 

InputStream  getStream(String key)

 – pobiera strumień wejściowy związany z 

zadanym kluczem i występujący w kontekście apletu;  
 

Iterator getStreamKeys()

  –  pobera  klucze  dla  wszystkich  strumieni  w 

kontekście apletu;  

 void 

setStream(String key, InputStream stream)

 – związuje zadany strumień 

z zadanym kluczem; 
 

void 

showDocument(URL url)

  –  powoduje  zmianę  wyświetlanej  strony  na 

stronę o zadanym URL; 
 

void 

showDocument(URL url, String target)

 – Ŝądanie wyświetlenia zadanej 

strony; 
 

void 

showStatus(String status)

 – wyświetla zadany napis w oknie stanu. 

 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 6 



 

public  interface  AppletStub

 

-  podczas  pierwszego  utworzenia  apletu 

doł

ą

czana  jest  namiastka  ("stub")  apletu  metod

ą

 

setStub

  –  namiastka 

po

ś

redniczy  pomi

ę

dzy  apletem  a  procesem  przegl

ą

darki.  Wyznacza 

takie metody, jak: 

 

void 

appletResize(int width, int height)

 – do zmiany rozmiaru okna apletu; 

 

AppletContext 

getAppletContext()

 – do uzyskania obiektu kontekstu apletu. 

 

URL 

getCodeBase()

 – do pobrania bazowego adresu URL apletu; 

 

URL 

getDocumentBase()

 – do pobrania globalnej kartoteki dokumentu; 

 

String  getParameter(String name)

  –  do  pobrania  wartości  nazwanego 

parametru. 
 

boolean isActive()

 – podaje to, czy aplet jest w stanie aktywnym. 

 



 

public  interface  AudioClip

  –  wyznacza  metody  dla  odtwarzania  klipów 

d

ź

wi

ę

kowych.  

void 

loop()

 -  uruchamia odtwarzanie klipu dźwiękowego w pętli;  

 void 

play()

 – uruchamia odtwarzanie klipu dźwiękowego;  

 void 

stop()

 – zatrzymuje odtwarzanie klipu dźwiękowego. 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 7 

2) Charakterystyka 



 Klasa 

Applet

 posiada metody wywoływane przez przegl

ą

dark

ę

 wtedy, 

gdy  zachodz

ą

 

zmiany  w  stanie  apletu

  –  inicjalizuje  si

ę

,  rozpoczyna 

wykonanie, zatrzymuje, jest usuwany. 

Nadpisanie

 tych metod pozwala 

na odpowiedni

ą

 reakcj

ę

 apletu na zmian

ę

 jego stanu. 

 



 

Applet

 dziedziczy metody do 

malowania grafiki i obrazów

 oraz 

obsługi 

zdarze

ń

  po  klasie 

Container

  w  pakiecie 

AWT

  („Abstract  Windowing 

Toolkit”)  –  przeznaczonym  do  tworzenia  graficznego  interfejsu 
u

Ŝ

ytkownika (GUI). 

 



 Apletów  dotycz

ą

 

ograniczenia  zabezpieczaj

ą

ce

:  zwykle  nie  mog

ą

 

odczytywa

ć

  i  zapisywa

ć

  plików  na  komputerze  na  którym  si

ę

 

wykonuj

ą

,  nie  mog

ą

  ł

ą

czy

ć

  si

ę

  z  innym  komputerem  za  wyj

ą

tkiem 

swojego „domowego”. 

 



 

Znacznik 

<APPLET>

  j

ę

zyka  HTML  umo

Ŝ

liwia  doł

ą

czenie  apletu  do 

strony html.  

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 8 

3) Bezpo

ś

rednia klasa pochodna

  

Klasa 

JApplet

 

(w pakiecie

 

javax.swing

)

 

public class JApplet extends Applet implements Accessible,  

RootPaneContainer 

JApplet

 umo

Ŝ

liwia u

Ŝ

ycie klas 

JFC/Swing

 dla apletu. 

 

Obiekt  klasy 

JApplet

 

zawiera  jeden  jedyny  komponent  klasy 

JRootPane

 

(który posiada 

contentPane, glassPane, layeredPane

) a dalsze komponenty 

nale

Ŝ

y doł

ą

cza

ć

 nie bezpo

ś

rednio do apletu a do jego 

contentPane

.  

Np. dla obiektu klasy 

Applet

 piszemy: 

       applet.addkomponent ); 

 ale dla klasy 

JApplet

 nale

Ŝ

y doda

ć

 komponent w nast

ę

puj

ą

cy sposób:  

       applet.getContentPane().addkomponent ); 

 

Podobne  ró

Ŝ

nice  wyst

ą

pi

ą

  dla  innych  operacji,  jak  np.  ustawianie 

menad

Ŝ

era 

układu

 

("

LayoutManager

")

usuwanie 

komponentów, 

porz

ą

dkowanie  -  wszystkie  te  operacje  wykonuje  si

ę

  na  obiekcie 

składowym 

contentPane

 a nie na samym obiekcie klasy 

JApplet

.  

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 9 

4) Metody klasy 

Applet 

informuj

ą

ce o stanie apletu 

public boolean isActive() 

Informuje o tym, czy aplet jest aktywny. Aplet staje si

ę

 aktywny tu

Ŝ

 przed  

wywołaniem  jego  metody 

start

,  a  przestaje  by

ć

  aktywny  tu

Ŝ

  przed 

wywołaniem jego metody 

stop

 

public String getAppletInfo() 

Podaje informacj

ę

 o danym aplecie - autora, wersj

ę

, prawa autorskie, itp. 

 

public Locale getLocale() 

Podaje obiekt klasy 

Locale

 dla apletu - reprezentuje on region kulturowy. 

Je

ś

li nie ustawiono obiektu 

Locale

 to zwracany jest domy

ś

lny obiekt.  

public final class Locale extends Object implements Cloneable, Serializable 

(w pakiecie 

java.util

Konstruktory klasy: 

 Locale(String language
 Locale(String language, String country
 Locale(String language, String country, String variant

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 10 

Argumenty konstruktorów 

Locale

:  

language

  -  to  kod  j

ę

zyka  (kod  dwu-literowy  według  normy  ISO-639  - 

"małe litery"); 

country

 - to kod kraju (kod 2-literwoy kraju według normy ISO-3166 - 

"du

Ŝ

e litery"); 

variant

  -  to  kod  charakteryzuj

ą

cy  producenta  lub  przegl

ą

dark

ę

  -  np. 

"es", "ES", "Traditional_WIN".  

 

public AccessibleContext getAccessibleContext() ; 

Metoda 

zwraca 

obiekt 

typu 

AccessibleApplet

 

pełni

ą

cy 

rol

ę

 

AccessibleContext

 dla danego apletu. 

 

Szereg metod 

Applet

 

jest dziedziczonych z klas:  

java.awt.Panel,  
java.awt.Container,  
java.awt.Component,  
java.lang.Object

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 11 

5) Czas 

Ŝ

ycia apletu - główne metody  

Ładowanie apletu  



 tworzony jest obiekt klasy apletu (klasa pochodna od

 Applet);  



 aplet sam si

ę

 inicjalizuje - 

init

;  



 aplet jest uruchamiany 

start 

 

Opuszczenie i powrót do strony z apletem 

Podczas  opuszczania  strony  przez  u

Ŝ

ytkownika  jej  aplet  mo

Ŝ

e  si

ę

 

zatrzyma

ć

  – 

stop

.  Podczas  powrotu  do  strony  jej  aplet  mo

Ŝ

e  si

ę

 

wznowi

ć

  – 

start

.  Podobna  sytuacja  zachodzi  gdy  okno  strony  jest 

miniaturyzowane i ponownie przywracane. 

 

Od

ś

wie

Ŝ

anie apletu 

Niekiedy  przegl

ą

darka  umo

Ŝ

liwia  od

ś

wie

Ŝ

anie  apletu,  tzn.  jego 

zwolnienie (

stop

destroy

) i ponowne załadowanie. 

 

Usuwanie apletu 

Aplet  ma  szans

ę

  wykonania  ko

ń

cowych  operacji  czyszcz

ą

cych 

(

destroy

). 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 12 

public void init() 

Metoda  wywoływana  przez  przegl

ą

dark

ę

  w  celu  poinformowania  apletu 

o  tym, 

Ŝ

e  został  załadowany  do  pami

ę

ci.  Nast

ę

puje  to  zawsze  przed 

pierwszym  wywołaniem  metody 

start

.  Umo

Ŝ

liwia  to  własn

ą

  inicjalizacj

ę

 

apletu, np. uruchomienie w

ą

tków. 

public void start() 

Metoda  wywoływana  przez  przegl

ą

dark

ę

  w  celu  poinformowania  apletu 

o  tym, 

Ŝ

e  powinien  rozpocz

ąć

  lub  wznowi

ć

  swoje  wykonywanie,  np. 

wykonywa

ć

 animacj

ę

public void stop() 

Metoda  wywoływana  przez  przegl

ą

dark

ę

  w  celu  poinformowania  apletu 

o  tym, 

Ŝ

e  powinien  zawiesi

ć

  swoje  wykonywanie,  np.  zatrzyma

ć

 

animacj

ę

public void destroy() 

Metoda  wywoływana  przez  przegl

ą

dark

ę

  w  celu  poinformowania  apletu 

o tym, 

Ŝ

e b

ę

dzie usuni

ę

ty z pami

ę

ci i powinien usun

ąć

 wszelkie zasoby, 

z  których  korzysta,  np.  usun

ąć

  w

ą

tki.  Przed  t

ą

  metod

ą

  zawsze  b

ę

dzie 

wołana metoda 

stop

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 13 

Przykład.

 Aplet 

Simple

 wy

ś

wietla napis odpowiedni do swojego stanu.

 

import java.applet.Applet; 
import java.awt.Graphics; 
public class Simple extends Applet { 
    StringBuffer buffer;   

// Przechowuje prezentowany tekst

 

    public void init() { 
        buffer = new StringBuffer(); 
        addItem("initializing... "); 
    } 
    public void start() { 
        addItem("starting... "); 
    } 
    public void stop() { 
        addItem("stopping... "); 
    } 
    public void destroy() { 
        addItem("preparing for unloading..."); 
    } 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 14 

    void addItem(String newWord) { 
        System.out.println(newWord); 
        buffer.append(newWord); 
        repaint(); 
    } 
    public void paint(Graphics g) { 

  // Wykreśla prostokąt wokół obszaru ekranu apletu  

        g.drawRect(0, 0, size().width - 1, size().height - 1); 

  // Wypisz aktualny napis w obszarze ekranu apletu. 

        g.drawString(buffer.toString(), 5, 15); 
    } 

Aplet wywoływany jest ze strony html, np.: 

<applet code="Simple.class" codebase=example-1dot1/ width=500 height=20> 
</applet> 

Ten aplet pojawia si

ę

 z tekstem oddaj

ą

cym stan obiektu klasy 

Simple

 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 15 

Główne metody apletu

 - 

init(), start(), stop(), destroy()

 

Np. Nasza klasa 

Simple

public class Simple extends Applet { 
    . . . 
    public void init() { . . . } 

// Inicjalizacja podczas ładowania apletu

 

    public void start() { . . . } 

// Uruchamianie wykonania apletu 

    public void stop() { . . . } 

// Zatrzymanie wykonywania apletu 

    public void destroy() { . . . } 

// Czyszczenie podczas usuwanie apletu

 

    . . . 



 Metoda 

init 

zawiera zwykle to co powinien zawiera

ć

 konstruktor.

 



 W  aplecie,  który  wykonuje  co

ś

  wi

ę

cej  ni

Ŝ

  tylko  reakcje  na  akcje 

u

Ŝ

ytkownika,  powinno  si

ę

  nadpisa

ć

  metod

ę

  start. 

Ta  metoda 

wykonuje  zadanie  apletu  lub  uruchamia  jego  w

ą

tki.  Wtedy  tak

Ŝ

nale

Ŝ

y nadpisa

ć

 metod

ę

 

stop.

 



 Metoda 

destroy

  umo

Ŝ

liwia  zwolnienie  zasobów,  których  nie 

decydujemy si

ę

 zwalnia

ć

 w metodzie 

stop

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 16 

6) Metody dla wykre

ś

lania grafiki i dla obsługi zdarze

ń

 

Dost

ę

pne  s

ą

  dwie  metody  (dziedziczone  z  klasy 

Container

)  dla 

realizacji wy

ś

wietlania apletu: 

public void paint(Graphics g) 
public void update(Graphics g) 



 

paint()

 

–  metoda  przeznaczona  dla  definicji  sposobu  wy

ś

wietlenia 

apletu; 



 

update()

 

–  ta  metoda  wywoływana  jest  przez 

repaint()

  (dla  cało

ś

ci 

lub  cz

ęś

ci  komponentu)  i  powoduje  wy

ś

wietlenie  apletu  metod

ą

 

paint()

;  umo

Ŝ

liwia  zdefiniowanie  w  klasie  apletu  dodatkowych 

czynno

ś

ci,  które  nale

Ŝ

y  wykona

ć

  podczas  od

ś

wie

Ŝ

ania  wygl

ą

du 

apletu. 

Graphics

 reprezentuje obszar graficzny danego komponentu. 

 
Np. w klasie 

Simple

 nadpisano metod

ę

 

paint

class Simple extends Applet { 
    . . . 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 17 

    public void paint(Graphics g) { . . . } 
    . . . 

 
Klasa 

Component

  posiada  szereg  metod  obsługi  zdarze

ń

,  np. 

action

mouseDown

;  a  tak

Ŝ

e  jedn

ą

  metod

ę

  dla  wszystkich  zdarze

ń

 

handleEvent

.

  

 
Np. Uzupełnimy klas

ę

 

Simple

 

o obsług

ę

 zdarzenia klikni

ę

cia mysz

ą

import java.awt.Event; 
. . . 
public boolean mouseDown(Event event, int x, int y) { 
    addItem("click!... "); 
    return true; 

Teraz gdy klikniemy w polu apletu wy

ś

wietli si

ę

 napis "click!...".  

 

 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 18 

Inne metody obsługi zdarze

ń

 dziedziczone przez 

Applet

 po 

Component

keyDown, keyUp,  
mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp,  
processComponentEvent,  processFocusEvent,  processHierarchyBoundsEvent, 
processHierarchyEvent,  
processInputMethodEvent,  
processKeyEvent,  
processMouseEvent, processMouseMotionEvent, processMouseWheelEvent. 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 19 

7) Metody słu

Ŝą

ce doł

ą

czaniu komponentów GUI (w AWT) 

Prosty  kod  metody

 

paint

 

w  klasie

 

Simple

 

nie  obsługuje  przepełnienia 

ekranu, tzn. nie zapewnia przesuwu wy

ś

wietlania ("scrolling").  

Np. po przepełnieniu dalszy tekst nie jest widoczny: 
 

 

 
Mo

Ŝ

na  zastosowa

ć

  klasy  komponentów  interfejsu  u

Ŝ

ytkownika  - 

przeznaczone dla projektowania interfejsu u

Ŝ

ytkownika programu (UI), 

np. z pakietów 

AWT

 lub 

Swing

 
Klasa 

Applet

 

dziedziczy  z  klasy 

Container

,  czyli  mo

Ŝ

na  dodawa

ć

 

komponenty  i  korzysta

ć

  z  menad

Ŝ

era  układu  dla  operowania 

pozycjami komponentów na ekranie.  
 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 20 

Pakiet AWT

 zawiera nast

ę

puj

ą

ce komponenty dla GUI:  

 kontenery (klasy

 java.awt.

Panel

, java.awt.

Window

 

i ich pochodne).

 

 przycisk (klasa 

java.awt.Button

)  

 okienko wyboru (klasa 

java.awt.Checkbox

) i grupa wykluczaj

ą

cych si

ę

 

okien wyboru (

java.awt.CheckboxGroup

 pole tekstowe 1-wierszowe (klasa 

java.awt.TextField

)  

 obszar edycyjny (klasa 

java.awt.TextArea

)  

 etykieta (klasa 

java.awt.Label

)  

 lista wyborów (klasa  

java.awt.List

)  

 rozwijana lista wyborów (klasa 

java.awt.Choice

)  

 pasek przewijania (klasa

 java.awt.Scrollbar)  

 obszar wykre

ś

lania (klasa

 java.awt.Canvas)  

 menu (klasy

 java.awt.Menu, java.awt.MenuBar, java.awt.MenuItem, 

java.awt.CheckboxMenuItem)  

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 21 

Niektóre metody klasy 

Container

,

 z których mo

Ŝ

e korzysta

ć

 aplet:  



 

add

  - dodaj podany komponent,  



 

remove

 

- usu

ń

 podany komponent, 



 

setLayout

 

-  ustaw menad

Ŝ

era układu



 

public void resize(int width,  int height) 

Powoduje  zmian

ę

  rozmiaru  ekranu  dla  apletu  na  nowy  (szeroko

ść

  i 

wysoko

ść

 podane jako argumenty wywołania). 



 

public void resize(Dimension d) 

Powoduje  zmian

ę

  rozmiaru  ekranu  dla  apletu  na  nowy  (szeroko

ść

  i 

wysoko

ść

 podane s

ą

 w obiekcie-argumencie d). 

 

Przykład.

  W  klasie 

Simple

 

zastosujemy  przesuwne,  nie  edytowalne 

pole tekstowe - obiekt klasy 

TextField

 : 

// Importowanie java.awt.Graphics nie jest juŜ potrzebne, gdyŜ teraz 
// aplet nie implementuje metody paint(). 

import java.awt.TextField
    public class ScrollingSimple extends Applet { 
   TextField field;   

// Zamiast ze StringBuffer korzystamy z TextField 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 22 

    public void init() { 
        field = new TextField()

// Utwórz obiekt klasy "pole tekstowe"

 

        field.setEditable(false); 

// Ustaw pole jako nie-edytowalne 

        setLayout(new java.awt.GridLayout(1,0)); 

// Ustaw układ tak, Ŝe

 

   

 

 

 

 

 

 

// pole jest najszersze z moŜliwych. 

        add(field); 

// Dodaj pole tekstowe do apletu 

        validate(); 

// Opracuje kontener i wyświetli go na ekranie 

        addItem("initializing... "); 
    } 

// . . . 

    void addItem(String newWord) { 

        // Teraz ta metoda dołącza tekst do naszego TextField. 

        String t = field.getText(); 
        System.out.println(newWord); 
        field.setText(t + newWord); 
        repaint()

//Widok pola tekstowego na ekranie zostanie odświeŜony.

  

    } 

 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 23 

8) Co aplety mog

ą

 a czego nie mog

ą

  

Przegl

ą

darki "z rezerw

ą

" traktuj

ą

 aplety ładowane przez sie

ć

 Aplet  nie  mo

Ŝ

e  doł

ą

cza

ć

  bibliotek  ani  definiowa

ć

  metod 

"rodzimych".  

 Nie mo

Ŝ

e odczytywa

ć

 lub zapisywa

ć

 plików na maszynie na której 

si

ę

 wykonuje.  

 Nie  mo

Ŝ

e  ł

ą

czy

ć

  si

ę

  z  si

ę

  z  innymi  maszynami  za  wyj

ą

tkiem 

własnej, z której pochodzi.  

 Nie mo

Ŝ

e uruchomi

ć

 

Ŝ

adnego programu na aktualnej maszynie.  

 Nie mo

Ŝ

e odczytywa

ć

 pewnych własno

ś

ci systemu.  

 Okna aktywowane przez aplet ró

Ŝ

ni

ą

 si

ę

 od okien przegl

ą

darki.  

 
Ka

Ŝ

da przegl

ą

darka dysponuje obiektem klasy 

SecurityManager

, który 

implementuje  polityk

ę

  zabezpiecze

ń

.  Aplet  mo

Ŝ

e  przechwyci

ć

  wyj

ą

tek 

SecurityException

  zgłaszany  przez 

SecurityManager

  i  odpowiednio 

zareagowa

ć

 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 24 

 
Jednak  aplety  posiadaj

ą

  te

Ŝ

  wbudowane  mo

Ŝ

liwo

ś

ci,  których  nie 

maj

ą

 aplikacje. 

 Aplet mo

Ŝ

e ł

ą

czy

ć

 si

ę

 poprzez sie

ć

 ze "swoim komputerem".  

 Pracuj

ą

c w ramach przegl

ą

darki aplet mo

Ŝ

e wy

ś

wietla

ć

 strony HTML. 

 Aplet  mo

Ŝ

e  wywoła

ć

  publiczne  metody  innego  apletu  z  tej  samej 

strony.  

 Aplety  ładowane  z  lokalnego  systemu  plików  (z  kartoteki  w 

CLASSPATH  u

Ŝ

ytkownika)  nie  posiadaj

ą

  ogranicze

ń

  dotykaj

ą

cych 

apletów ładowanych poprzez sie

ć

.  

 Aplet nie musi ko

ń

czy

ć

 pracy wraz z opuszczeniem jego strony przez 

u

Ŝ

ytkownika.  

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 25 

9) Uruchamianie apletu  

Nale

Ŝ

y doł

ą

czy

ć

 aplet do dokumentu HTML znacznikiem 

<APPLET>

 . 

Nale

Ŝ

y poda

ć

 URL strony HTML przegl

ą

darce Javy lub AppletViewer.  

Np. 

 

<APPLET CODE=AppletSubclass.class WIDTH=anInt HEIGHT=anInt

</APPLET> 

 

Wykonanie instrukcji znacznika przez przegl

ą

dark

ę

-  rezerwuje dla apletu obszar ekranu o podanym rozmiarze, 
-  ładuje bajt-kod podanego apletu, 
-  tworzy obiekt podanej klasy apletu, 
-  wywołuje metody 

init

 i 

start

 dla obiektu apletu. 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 26 

4.2 Apletowe API 

1) Odszukanie i załadowanie plików z danymi 

 



 

public URL getCodeBase() 

Zwraca adres URL apletu - URL kartoteki z której ładuje si

ę

 aplet. 

 



 

public URL getDocumentBase() 

Zwraca  adres  URL  z  nazw

ą

  kartoteki  w  której  znajduje  si

ę

  dokument 

HTML zawieraj

ą

cy dany aplet.Np. je

ś

li aplet zawarty jest w dokumencie: 

    http://java.sun.com/products/jdk/1.2/index.html 

to jego "

document base

" wynosi:  

    http://java.sun.com/products/jdk/1.2/ 

 



 Je

ś

li  znacznik 

<APPLET>

  nie  zawiera  "

code  base

"  to  zarówno 

code 

base

 jak i 

document base

 odnosz

ą

 si

ę

 do tej samej kartoteki. 



 Dane apletu s

ą

 zwykle adresowane wzgl

ę

dem jego 

code base

.  



 Dane  specyfikowane  przez  u

Ŝ

ytkownika  apletu  s

ą

  adresowane 

relatywnie do 

document base

.  

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 27 

Przykład

.  Obrazy  i  d

ź

wi

ę

ki  b

ę

d

ą

  adresowane  relatywnie  do  bazowego 

URL.  Nast

ę

puj

ą

ca  instrukcja  utworzy  obiekt  klasy 

Image

  zwi

ą

zany  z 

plikiem 

a.gif

 w kartotece 

imgDir

 : 

Image image = getImage(

getCodeBase(), "imgDir/a.gif"

); 

 



 

public Image getImage(URL url) 

Zwraca  obiekt  klasy 

Image

,  który  mo

Ŝ

e  by

ć

  wizualizowany  na  ekranie. 

Argument  typu  URL  podaje  absolutny  adres  obrazu.  Obraz  ładowany 
jest dopiero w momencie, gdy ma on by

ć

 umieszczony na ekranie. 



 

public Image getImage(URL url,  String name) 

Zwraca  obiekt  klasy

  Image

,  który  mo

Ŝ

e  by

ć

  wizualizowany  na  ekranie. 

Argument  typu  URL  podaje  absolutny  adres,  a  drugi  argument  podaje 
dokładne  poło

Ŝ

enie  obrazu  wzgl

ę

dem  pierwszego  adresu.  Obraz 

ładowany jest dopiero wtedy, gdy ma on by

ć

 umieszczony na ekranie.

 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 28 

2) Wy

ś

wietlanie krótkich napisów o statusie 

W  przegl

ą

darce  istnieje 

wiersz  statusu

,  do  którego  dost

ę

p  ma 

przegl

ą

darka  i  jej  aplety.  Aplet  mo

Ŝ

e  wysyła

ć

  tam  krótkie  napisy 

informuj

ą

ce o aktualnym stanie przetwarzania. 



 

public void showStatus(String msg) 

- wy

ś

wietlenie napisu - argumentu w "oknie statusu" przegl

ą

darki. 

Np.  

showStatus("MyApplet: Loading image file " + file); 

 

3) Wy

ś

wietlanie dokumentów 

Aplet  mo

Ŝ

e  przekaza

ć

  do  przegl

ą

darki  wezwanie,  aby  ta  wy

ś

wietliła 

sformatowany  tekst  w  HTML.  Słu

Ŝ

y  do  tego  metoda 

showDocument

  w 

klasie 

AppletContext

, wyst

ę

puj

ą

ca w 2 postaciach: 

public void showDocument(java.net.URL url
public void showDocument(java.net.URL url, String targetWindow

Pierwsza  wersja  podaje  jedynie  adres  dokumentu  przewidzianego  do 
wy

ś

wietlenia.  

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 29 

Druga wersja podaje tak

Ŝ

e w którym oknie nale

Ŝ

y wy

ś

wietli

ć

 dokument.  

Drugim argumentem mo

Ŝ

e by

ć



 

"_blank

"

  - w nowym, nienazwanym oknie;  



 

"

windowName

"

 - w oknie o podanej nazwie, w razie potrzeby utworzy 

to okno;  



 

"_self

"

 - w oknie i ramce tej samej co aplet;  



 

"_parent

"

 - w oknie apletu ale w ramce przodka dla ramki apletu; je

ś

li 

ramka apletu nie posiada przodka to efekt jest ten sam co dla 

"_self"

.  



 

"_top

"

 - w oknie apletu ale w ramce najwy

Ŝ

szego poziomu; je

ś

li jest 

nim ramka apletu to efekt jest ten samo co dla 

"_self"

.  

 

Przykład.

  Pewien  aplet 

ShowDocument

  ilustruje  u

Ŝ

ycie  metody 

showDocument

  -  w  obu  wersjach  i  dla  wszystkich  opcji.  Aplet  wy

ś

wietla 

okno,  w  którym  podajemy  1  lub  2  argumenty  wywołania  metody 

showDocument

.  Aplet  wywołuje  t

ę

  metod

ę

  po  klikni

ę

ciu  przycisku  "

Show 

document"

 lub przyci

ś

ni

ę

ciu "

return

". 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 30 

 

 

...// W naszej klasie pochodnej od Applet utworzymy główne okno 
   // zwi
ązane z kontekstem apletu: 

        urlWindow = new URLWindow(getAppletContext()); 
. . . 
class URLWindow extends Frame { 

// Nasza klasa głównego okna

 

    . . . 
    public URLWindow(AppletContext appletContext) { 

// Okno uzyska  

   

 

 

 

// kontekst naszego apletu.  

. . . 
        this.appletContext = appletContext; 
. . . 
    } 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 31 

    . . . 
    public boolean action(Event event, Object o) { 

// Obsługa zdarzenia 

. . . 
         String urlString = 

/*napis wprowadzany przez uŜytkownika */

         URL url = null; 
         try {    url = new URL(urlString); 
         } catch (MalformedURLException e) { 

   

...// Poinformuj uŜytkownika i powróć ... 

            } 
            if (url != null) { 
                if (

/* uŜytkownik nie określa okna */

) { 

                    appletContext.showDocument( url ); 
                } else { 
                    appletContext.showDocument( url,  

/* podane okno */

); 

                } 
            } 
        . . . 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 32 

4) Przesyłanie komunikatów do innych apletów 

Aplet  mo

Ŝ

e  odnale

źć

  inne  aplety  i  przesła

ć

  do  nich  komunikat. 

Przegl

ą

darki nakładaj

ą

 zwykle ograniczenia:  



 aplety powinny pochodzi

ć

 z tego samego serwera,   



 czasami powinny by

ć

 w tej samej kartotece (ten sam "

code base

"),  



 Java API wymaga, aby aplety wykonywały si

ę

 na tej samej stronie - 

w tym samym oknie. 

 

Pobranie kontekstu dla apletu 

public AppletContext getAppletContext() 

Okre

ś

la kontekst dla apletu (m.in. dokument w którym jest zawarty), co 

pozwoli apletowi na zapytania do 

ś

rodowiska i jego modyfikacj

ę

 

Znalezienie  apletu  poprzez  jego  nazw

ę

  –  metoda 

getApplet()

  w  klasie 

AppletContext

.  Metoda 

getApplet()

  przeszukuje  wszystkie  aplety 

znajduj

ą

ce  si

ę

  na  bie

Ŝą

cej  stronie  i  zwraca  obiekt  klasy 

Applet

,  je

ś

li 

znajdzie aplet o podanej nazwie.  
 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 33 

Domy

ś

lnie

  aplety 

nie  posiadaj

ą

  nazw.  Nazw

ę

  nadaje  si

ę

  apletowi  na  2 

sposoby:  
(1)  podajemy  atrybut 

NAME

  na  stronie  ze  znacznikiem  apletu 

<APPLET>

 ; np.: 

<APPLET CODEBASE=example/ CODE=Sender.class 
    WIDTH=450 
    HEIGHT=200 
    NAME="Nadawca"
. . . 
</applet> 

(2) Podaj

ą

c parametr 

NAME

 w znaczniku 

<PARAM>

 ; np.:  

<APPLET CODEBASE=example/ CODE=Receiver.class 
    WIDTH=450 
    HEIGHT=35> 
<PARAM NAME="name" value="Odbiorca"> 
. . . 
</applet> 

Uwaga: du

Ŝ

e i małe litery w nazwie apletu zwykle nie s

ą

 rozró

Ŝ

niane.  

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 34 

Przykład.

  Aplet 

Sender

  poszukuje  apletu 

Receiver

.  Je

ś

li  go  znajdzie 

przesyła do niego komunikat. 

Receiver

 reaguje zmieniaj

ą

c swój napis po 

prawej stronie na: "

Otrzymano wiadomo

ść

 od 

sender-name

!".

  

Poniewa

Ŝ

  "

Nadawca

"  jest  nazw

ą

  samego 

S

ender

-a

,  aplet  o  tej  nazwie 

zostanie  znaleziony,  ale  nie  otrzyma  on  komunikatu,  gdy

Ŝ

  nie  jest 

obiektem klasy 

Receiver

 . 

Oto fragment apletu 

Sender

 słu

Ŝą

cy do komunikacji z 

Receiver

Applet receiver = null; 
String receiverName = nameField.getText(); 

// Podaj nazwę apletu

receiver = getAppletContext().getApplet(receiverName); 

... 

if (receiver != null) { 

 // Operatorem instanceof sprawdzimy, czy znaleziony obiekt jest 
 // klasy Receiver. 

    if (!(receiver instanceof Receiver)) { 
        status.appendText("Znaleziono aplet o nazwie " 
                          + receiverName + ", " 
                          + "ale nie jest on typu Receiver.\n"); 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 35 

    } else { 
        status.appendText("Znaleziono aplet o nazwie " 
                          + receiverName + ".\n" 
                          + "  Przesyłam mu komunikat. \n"); 

   // Konwersja do obiektu klasy Receiver aby móc wywołać metodę 
   // tej klasy a nie klasy Applet 

       ((Receiver)receiver).processRequestFrom(myName);  
    } 
} . . . 

Uwagi

  

Aplet  mo

Ŝ

e  pobra

ć

  swoj

ą

  własn

ą

  nazw

ę

  wołaj

ą

c  metod

ę

  klasy 

Aplet

  - 

getParameter

myName = getParameter("NAME"); 

Je

ś

li  obiekt 

Receiver

  miałby  równie

Ŝ

  przesyła

ć

  zwrotnie  komunikaty  do 

obiektu 

Sender

,  to 

Sender

  powinien  mu  przekaza

ć

  referencj

ę

  na  siebie. 

Np.: 

((Receiver)receiver).startCommunicating(this); 

 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 36 

Znalezienie wszystkich apletów na danej stronie

 

- metoda

 

getApplets()

.

 

Metoda 

getApplets

  zwraca  obiekt  klasy 

Enumeration

  b

ę

d

ą

cy  list

ą

 

wszystkich apletów danej strony. 

Przykład.

  Aplet 

getApplets

  listuje  wszystkie  aplety  danej  strony.  Oto 

fragmenty metody wywołuj

ą

cej 

getApplets

.  

public void printApplets() { 
Enumeration = getAppletContext().getApplets(); 
    . . .

 // Obiekt typu Enumeration zawiera wszystkie aplety danej strony 

 

    while (e.hasMoreElements()) { 
        Applet applet = (Applet)e.nextElement(); 
        String info = ((Applet)applet).getAppletInfo(); 
        if (info != null) { 
            textArea.appendText("- " + info + "\n"); 
        } else { 
            textArea.appendText("- " + applet.getClass().getName() + "\n"); 
        }  
    }     . . .    

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 37 

5) Odtwarzanie d

ź

wi

ę

ków 

Klasa 

Applet

  i  interfejs 

AudioClip

  realizuj

ą

  mechanizm  pobierania  i 

odtwarzania plików d

ź

wi

ę

kowych.  

 

Metody klasy 

Applet

 przeznaczone do pobierania plików d

ź

wi

ę

kowych: 

public static final AudioClip newAudioClip(URL url) 

Pobiera plik d

ź

wi

ę

kowy o podanym adresie URL.  

 

public AudioClip getAudioClip(URL url) 

Zwraca  obiekt  klasy 

AudioClip

  dla  podanego  adresu  URL.  Argument 

typu 

URL

  podaje  absolutny  adres  pliku.  Jest  on  ładowany  ale  nie  jest 

jeszcze odtwarzany. 

 

public AudioClip getAudioClip(URL url,  String name) 

Zwraca  obiekt  klasy 

AudioClip

.  Argument  typu  URL  podaje  absolutny 

adres,  a  drugi  argument  podaje  dokładne  poło

Ŝ

enie  pliku  d

ź

wi

ę

kowego 

wzgl

ę

dem  pierwszego  adresu.  Plik  jest  ładowany  ale  nie  jest  jeszcze 

odtwarzany.  

 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 38 

public void play(URL url) 

Odtwarza  plik  d

ź

wi

ę

kowy  znajduj

ą

cy  si

ę

  pod  podanym  adresem 

URL

Nie ma 

Ŝ

adnego efektu, gdy plik nie istnieje. 

public void play(URL url,  String name) 

Odtwarza  plik  d

ź

wi

ę

kowy  znajduj

ą

cy  si

ę

  pod  adresem  zło

Ŝ

onym  z 

adresu 

URL

 i wzgl

ę

dnego adresu 

name. 

Nie ma 

Ŝ

adnego efektu, gdy plik 

nie istnieje. 

 

Interfejs 

AudioClip

 wyznacza metody dla odtwarzania d

ź

wi

ę

ku: 



 

loop – 

odtwarza obiekt klipu w p

ę

tli,

  

play  - 

odtwarza obiekt klipu raz,

  

stop - 

zatrzymuje odtwarzanie klipu

.  

 

Przykład.

  Aplet 

SoundExample

  ilustruje  ładowanie  i  odtwarzanie  wielu 

plików d

ź

wi

ę

kowych jednocze

ś

nie. 

AudioClip onceClip, loopClip; 
onceClip = applet.getAudioClip(getCodeBase(), "bark.au"); 

// Utwórz klip 

loopClip = applet.getAudioClip(getCodeBase(), "train.au"); 

// Utwórz klip 

onceClip.play();     

// Odtwórz raz 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 39 

loopClip.loop();     

// Wykonuj odtwarzanie w pętli. 

loopClip.stop();     

// Zatrzymaj odtwarzanie pojedyncze lub w pętli.  

P

ę

tla  jest  zatrzymywana,  gdy  u

Ŝ

ytkownik  opuszcza  stron

ę

  apletu  i 

wznawiana,  gdy  u

Ŝ

ytkownik  powraca  do  strony  apletu.  Dzieje  si

ę

  tak 

dzi

ę

ki wła

ś

ciwemu zdefiniowaniu metod 

stop

 i 

start

 w aplecie: 

public void stop() { 

 // looping jest polem typu boolean  - początkowo ustawionym na "false";  
 // jest ustawiane na "true" gdy uŜytkownik wybiera przycisk w rodzaju 
 // "Odtwarzaj w petli" i na "false" gdy przycisk w rodzaju "Zatrzymaj". 

    if (looping) { 
        loopClip.stop();    

// Zatrzymaj pętlę odtwarzania dźwięków

 

    } 

public void start() { 
    if (looping) { 
        loopClip.loop();    

// Restartuj pętlę odtwarzania dźwięków

  

    } 
}     

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 40 

6) Parametry apletu 

Parametry s

ą

 dla apletu tym czym opcje linii komend dla programu. 

Decyzje projektowe: 

(1)  Jakie  parametry  i  z  jakimi  domy

ś

lnymi  warto

ś

ciami  powinien 

przyjmowa

ć

 aplet? 

(2)  Metoda 

getParameter

  -  aplet  pobiera  poprzez  ni

ą

  warto

ś

ci 

parametrów zadane przez u

Ŝ

ytkownika. 

(3)  Metoda 

getParameterInfo

  -  aplet  udost

ę

pnia  u

Ŝ

ytkownikowi 

informacj

ę

 o swoich parametrach.  

 

public String getParameter(String name) 

Zwraca warto

ść

 (lub 

null

) podanego parametru w znaczniku HTML. Np. 

dla znacznika: 

 <applet code="Clock" width=50 height=50> 
 <param name="Color" value="blue"> 
 </applet> 

wywołanie 

getParameter("Color")

 zwróci wynik  

"blue"

.  

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 41 

public String[][] getParameterInfo() 

Zwraca informacj

ę

 o parametrach istotnych dla danego apletu w postaci 

tablicy napisów. Ka

Ŝ

dy napis powinien mie

ć

 3 cz

ęś

ci: nazw

ę

, typ, opis

Np.: 

 String pinfo[][] = { 
   {"fps",    "1-10",    "frames per second"}, 
   {"repeat", "boolean", "repeat image loop"}, 
   {"imgs",   "url",     "images directory"} 
 }; 

 

Jakie parametry ? 

Zale

Ŝ

y  to  od  funkcji  apletu.  Np.  parametry  charakterystyczne  dla 

obrazów lub d

ź

wi

ę

ków, poło

Ŝ

enia plików, wygl

ą

du ramki apletu. 

 

Jakie nazwy parametrów?  

XXXSOURCE lub XXXSRC - dla plików danych. Np. IMAGESOURCE. 
NAME - tylko dla nazwy apletu.  
 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 42 

Jakie warto

ś

ci przyjmuj

ą

 parametry ? 

Wszystkie  warto

ś

ci  s

ą

  napisami  (String).  Napis  jest  interpretowany 

przez aplet na ró

Ŝ

ne sposoby. Typowe interpretacje napisu to: 



 URL ,  



 liczba całkowita , 



 liczba zmienno-przecinkowa , 



 warto

ść

 logiczna - "true"/"false" lub "yes"/"no" , 



 napis,  



 lista powy

Ŝ

szych danych. 

 

Jaka b

ę

dzie warto

ść

 domy

ś

lna parametru? 

Nawet  gdy  u

Ŝ

ytkownik  nie  przeka

Ŝ

e  warto

ś

ci  parametru  aplet  powinien 

pracowa

ć

 poprawnie dzi

ę

ki istnieniu warto

ś

ci domy

ś

lnych. 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 43 

Przykład.  

Nasza  klasa  nazywa  si

ę

 

AppletButton

.  Jej  GUI  składa  si

ę

  z  przycisku  i 

etykiety  oddaj

ą

cej  jej  status.  W  wyniku  klikni

ę

cia  przycisku  aplet 

wy

ś

wietla okno na ekranie. Klasa ta mo

Ŝ

e by

ć

 wykorzystywana w wielu 

dalszych  przykładach,  gdy

Ŝ

  jest  bardzo  elastyczna.  T

ę

  elastyczno

ść

 

zapewniaj

ą

 jej parametry. U

Ŝ

ytkownik mo

Ŝ

e okre

ś

li

ć

: typ wy

ś

wietlanego 

okna, tytuł okna, wysoko

ść

 i szeroko

ść

 okna, etykiet

ę

 samego przycisku, 

Np.  
znacznik 

<

APPLET

>

 dla 

AppletButton

 mo

Ŝ

e wygl

ą

da

ć

 nast

ę

puj

ą

co: 

<APPLET CODE=AppletButton.class CODEBASE=example 
     WIDTH=350 HEIGHT=60> 
<PARAM NAME=windowClass VALUE=BorderWindow> 
<PARAM NAME=windowTitle VALUE="BorderLayout"> 
<PARAM NAME=buttonText 
       VALUE="Click here to see a BorderLayout in action"> 
</APPLET> 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 44 

Kod dla interpretacji wyniku metody 

getParameter

 

Nale

Ŝ

y  zdefiniowa

ć

  kod  interpretuj

ą

cy  wynik  metody  zwracaj

ą

cej 

warto

ść

 parametru podan

ą

 przez u

Ŝ

ytkownika.  

public String getParameter(String name) 

 

Np. 

int requestedWidth = 0; 
. . . 
String windowWidthString = getParameter("WINDOWWIDTH"); 
if (windowWidthString != null) { 
    try {  

// Spróbuj dokona

ć

 konwersji napisu do liczby całkowitej

.

 

        requestedWidth = Integer.parseInt(windowWidthString); 
    } catch (NumberFormatException e) { 

        

// Tutaj pobierz domy

ś

ln

ą

 warto

ść

 parametru.  

    } 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 45 

Metoda 

getParameter

  umo

Ŝ

liwia  tak

Ŝ

e  pobranie  warto

ś

ci 

atrybutów

  dla 

znacznika apletu 

<APPLET>

 

Przykład

.

  W  naszej  klasie 

AppletButton

  zdefiniowali

ś

my  pobieranie 

parametrów apletu. 

String windowClass; 
String buttonText; 
String windowTitle; 
int requestedWidth = 0; 
int requestedHeight = 0; 
. . . 
public void init() { 
    windowClass = getParameter("WINDOWCLASS"); 
    if (windowClass == null) { 
        windowClass = "TestWindow"; 
    } 
    buttonText = getParameter("BUTTONTEXT"); 
    if (buttonText == null) { 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 46 

        buttonText = "Click here to bring up a " + windowClass; 
    } 
    windowTitle = getParameter("WINDOWTITLE");

 

    if (windowTitle == null) { windowTitle = windowClass; } 
    String windowWidthString = getParameter("WINDOWWIDTH"); 
    if (windowWidthString != null) { 
        try {  requestedWidth = Integer.parseInt(windowWidthString); 
        } catch (NumberFormatException e) { 

         // ... tu ustal domy

ś

ln

ą

 warto

ść

 dla parametru "szeroko

ść

".  

        } 
    } 
    String windowHeightString = getParameter("WINDOWHEIGHT"); 
    if (windowHeightString != null) { 
        try {  requestedHeight = Integer.parseInt(windowHeightString); 
        } catch (NumberFormatException e) { 

         // ... tu ustal domy

ś

ln

ą

 warto

ść

 dla parametru "wysoko

ść

".  

        } 
   } 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 47 

Przekazywanie informacji o parametrach 

Nale

Ŝ

y  zdefiniowa

ć

  metod

ę

 

getParameterInfo()

 

tak,  aby  przegl

ą

darka 

mogła pobra

ć

 informacj

ę

 o parametrach naszego apletu. 

Metoda 

getParameterInfo

 

zwraca  tablic

ę

  3-elementowych  tablic  typu 

String

W  ka

Ŝ

dej  z  tych  3-elementowych  tablic  1-szy  napis  jest  nazw

ą

 

parametru, drugi podaj informacj

ę

 o typie warto

ś

ci dla parametru a trzeci 

opisuje znaczenie parametru. 
 

Przykład.  

Implementacja 

getParameterInfo

  w  klasie 

Animator

,  w  której  okre

ś

lono 

13  parametrów,  umo

Ŝ

liwiaj

ą

cych  u

Ŝ

ytkownikowi  dostosowanie  animacji 

do swoich potrzeb. 

public String[][] getParameterInfo() { 
    String[][] info = { 

      // Nazwa parametru  Typ wartości   Opis 

        {"imagesource",     "URL",          "a directory"}, 
        {"startup",              "URL",          "displayed at startup"}, 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 48 

        {"background",      "URL",          "displayed as background"}, 
        {"startimage",        "int",              "start index"}, 
        {"endimage",         "int",              "end index"}, 
        {"namepattern",     "URL",          "used to generate indexed names"}, 
        {"pause",                "int",             "milliseconds"}, 
        {"pauses",              "ints",            "milliseconds"}, 
        {"repeat",               "boolean",     "repeat or not"}, 
        {"positions",          "coordinates",  "path"}, 
        {"soundsource",     "URL",          "audio directory"}, 
        {"soundtrack",       "URL",          "background music"}, 
        {"sounds",             "URLs",         "audio samples"}, 
    }; 
    return info; 
}     

 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 49 

7) Znacznik 

<APPLET> 

Znamy ju

Ŝ

 najprostsz

ą

 posta

ć

 znacznika 

<APPLET>

:  

<APPLET CODE=KlasaPochodnaOdApplet.class WIDTH=liczba1Int 
HEIGHT=liczba2Int> 
</APPLET> 

 

Parametry - znacznik 

<PARAM>

 

U

Ŝ

ytkownik  przekazuje  parametry  apletu  korzystaj

ą

c  ze  znaczników 

<PARAM>

,  które  nale

Ŝ

y  umie

ś

ci

ć

  zaraz  po  znaczniku 

<APPLET>

 

danego apletu.  

<APPLET CODE=NazwaApletu.class WIDTH=liczba1Int HEIGHT=liczb2Int
<PARAM NAME=parametr1Nazwa VALUE=wartość1
<PARAM NAME=parametr2Nazwa VALUE=wartość2
</APPLET> 
 

Przykład. 

<APPLET CODE="Animator.class" WIDTH=460 HEIGHT=160> 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 50 

<PARAM NAME="imageSource" VALUE="images/Beans"> 
<PARAM NAME="backgroundColor" VALUE="0xc0c0c0"> 
<PARAM NAME="endImage" VALUE=10> 
<PARAM NAME="soundSource" VALUE="audio"> 
<PARAM NAME="soundtrack" VALUE="spacemusic.au"> 
<PARAM NAME="sounds"        
           VALUE="1.au|2.au|3.au|4.au|5.au|6.au|7.au|8au|9.au|0.au"> 
<PARAM NAME="pause" VALUE=200> 
</APPLET> 

 

Alternatywny kod HTML i alternatywny tekst 



 Alternatywnym kodem HTML jest dowolny tekst wyst

ę

puj

ą

cy pomi

ę

dzy 

znacznikami 

<APPLET>

  i 

</APPLET>

  po  znacznikach 

<PARAM>

  - 

przegl

ą

darki  Javy,  rozpoznaj

ą

ce  znacznik 

<APPLET>

,  ignoruj

ą

 

alternatywny kod 

HTML

 – w przeciwnym razie wy

ś

wietl

ą

 go. 



 Mo

Ŝ

na te

Ŝ

 przegl

ą

darkom przekaza

ć

 alternatywny tekst posługuj

ą

c si

ę

 

atrybutem 

ALT

  w  znaczniku 

<APPLET>

  Je

ś

li  przegl

ą

darka  nie  mo

Ŝ

wy

ś

wietli

ć

 apletu wy

ś

wietli alternatywny tekst apletu.  

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 51 

 

Przykład 

<APPLET CODE="Animator.class" WIDTH=460 HEIGHT=160 
 ALT=

"Jeśli widać animację to znaczy, Ŝe aplet się wykonuje"

> 

<PARAM NAME="imageSource" VALUE="images/Beans"> 
<PARAM NAME="backgroundColor" VALUE="0xc0c0c0"> 
<PARAM NAME="endImage" VALUE=10> 
<PARAM NAME="soundSource" VALUE="audio"> 
<PARAM NAME="soundtrack" VALUE="spacemusic.au"> 
<PARAM NAME="sounds" 
       VALUE="1.au|2.au|3.au|4.au|5.au|6.au|7.au|8au|9.au|0.au"> 
<PARAM NAME="pause" VALUE=200> 

Przeglądarka ignoruje znacznik  &lt;APPLET&gt; ! 

</APPLET> 

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 52 

 

Specyfikacja katalogu apletu  

Domy

ś

lnym  poło

Ŝ

eniem  apletu  jest  bie

Ŝą

cy  katalog  strony  HTML  z 

apletem. Je

ś

li aplet podany jest poprzez pakiet, to poszukuje si

ę

  go na 

ś

cie

Ŝ

ce pakietu, "wychodz

ą

cej" z bie

Ŝą

cego katalog. 

Je

ś

li  aplet  ma  by

ć

  w  innym  miejscu  posłu

Ŝ

y

ć

  si

ę

  nale

Ŝ

y  atrybutem 

CODEBASE

 . 

<APPLET CODE=AppletSubclass.class CODEBASE=aURL 
        WIDTH=anInt HEIGHT=anInt
</APPLET> 

Je

ś

li aURL jest wzgl

ę

dnym URL to "podczepiony" zostanie pod bie

Ŝą

cy 

katalog  strony  HTML.  Je

ś

li  aURL  jest  absolutnym  URL  to  mo

Ŝ

oznacza

ć

 nawet katalog zdalnego komputera w sieci. 

background image

4. Pakiet 

java.applet

 

W. Kasprzak: Programowanie zdarzeniowe 

4 - 53 

 

Archiwizacja plików apletu 

Je

ś

li kod apletu składa si

ę

 z wielu plików to opłaca si

ę

 je zarchiwizowa

ć

 

w postaci jednego pliku. 
Standardowy format archiwum w Javie to 

JAR

 (oparty na formacie ZIP). 

Pliki typu 

JAR

 podaje si

ę

 w atrybucie 

ARCHIVE

 znacznika 

<APPLET>

Mo

Ŝ

na poda

ć

 na raz wiele plików archiwizacyjnych po przecinku. 

Np. 

<APPLET CODE="AppletSubclass.class" ARCHIVE="file1, file2" 

 WIDTH=anInt HEIGHT=anInt> 

</APPLET> 

 

Inne atrybuty znacznika 

<APPLET>

  

ALIGN, VSPACE, HSPACE, NAME