java_05.pdf

(301 KB) Pobierz
Microsoft Word - roz_5.doc
Jacek Rumi ń ski - J ę zyk JAVA – Rozdzia ł 5
Rozdział 5 Aplety, grafika w Javie
5. 1 Aplety
5.2 Grafika w Javie
5.2. 1 Komponenty
5.2.2 Kontenery
5.2.3 Rozk ł ady
5.2.4 Zdarzenia
5.1 Aplety
Aplet jest programem komputerowym, stworzonym w ten sposób, że możliwe
jest jego wykonywania tylko z poziomu innej aplikacji. Oznacza to, że aplet nie jest
samodzielnym programem. Jak wspomniano już na początku tego materiału,
definicja apletu odbywa się poprzez definicję klasy dziedziczącej z klasy Aplet.
Konieczne jest więc jawne importowanie pakietu java.applet. * zawierającego tylko
jedną klasę Applet . Klasa Applet dziedziczy w następujący sposób z klasy Object :
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Panel
java.applet.Applet
Rysunek 5.1 Dziedziczenie dla klasy Applet.
Nadklasą klasy Applet jest klasa Panel zdefiniowana w graficznym pakiecie AWT –
Abstract Window Toolkit . Łatwo się więc domyśleć, że również i aplet ma formę
graficzną. Można w dużym uproszczeniu powiedzieć, że pole robocze apletu jest
oknem graficznym, w którym wszystkie operacje edycyjne wykonuje się przez
odwołanie do obiektu graficznego klasy Graphics . AWT zostanie omówiona poniżej i
tam również zaprezentowane zostaną liczne przykłady apletów związane z grafiką.
Jak już wspomniano aplet jest programem wykonywany pod kontrolę innej aplikacji.
Przykładową aplikacją może być przeglądarka stron HTML (np. Netscae Navigator,
MS Internet Explorer, itp.). Oznacza to, że konieczne jest umieszczenie wywołania
kodu apletu w ciele strony HTML obsługiwanej przez daną przeglądarkę. W tym celu
5-3
Jacek Rumi ń ski - J ę zyk JAVA –
6205255.001.png
Jacek Rumi ń ski - J ę zyk JAVA – Rozdzia ł 5
wprowadzono w HTML następujące tagi: <APPLET> oraz </APPLET> oznaczające
odpowiednio początek i koniec pól definiujących aplet. Podstawowym polem
(atrybutem) jest pole CODE informujące aplikację czytającą HTML gdzie znajduje się
skompilowany kod apletu. Przykładowo w omawianym już przykładzie 1.4 atrybut
CODE zdefiniowano następująco: code=Jedi2.class. W przykładzie tym aplikacja ma
pobrać kod apletu umieszczony w pliku o nazwie Jedi2.class znajdujący się w
aktualnym katalogu. W celu wskazania ewentualnego katalogu, w którym
umieszczono kod apletu można posłużyć się polem CODEBASE, np.
code=Jedi2.class codebase=klasy . Aplet może posiadać swoją nazwę określoną w
kodzie HTML poprzez wykorzystanie pola NAME, np. code=Jedi2.class
name=aplecik. Inne bardzo popularne pola wykorzystywane do opisu apletu to
WIDTH oraz HEIGHT. Oba parametry oznaczają rozmiar (szerokość i wysokość)
pola pracy apletu zawartego na stronie WWW. Przykładowo code=Jedi2.class
width=200 height=100 oznacza ustalenie pola pracy apletu na stronie WWW o
szerokości 200 pikseli i wysokości 100 pikseli. Możliwe jest również sterowanie
położeniem okna względem tekstu poprzez przypisanie odpowiedniej wartości do
pola ALIGN, takich jak: LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE,
BASELINE, BOTTOM oraz ABSBOTTOM np. align=middle. Czasami przydatne jest
odseparowanie pola apletu od otaczającego tekstu. Wykonuje się to poprzez
właściwe ustawienie liczby pikseli stanowiących spację w poziomie i pionie, czyli
poprzez wykorzystanie pól: HSPACE i VSPACE. Ponieważ z różnych przyczyn nie
zawsze przeglądarka będzie w stanie uruchomić aplet dlatego warto wprowadzić
zastępczy tekst co wykonuje się poprzez przypisanie tekstu do pola ALT, np.
alt=”Aplet rysujący znak firmowy”
W pracy z apletami istotny jest również fakt, że często koniecznie trzeba wykorzystać
kilka różnych plików związanych z apletem (np. kilka klas, obrazki, dźwięki, itp.).
Efektywnie wygodne jest powiązanie wszystkich plików związanych z danym apletem
w jeden zbiór (np. eliminacja czasu nawiązania połączeń osobno dla każdego pliku
HTTP 1.0). Java daje taką możliwość poprzez stworzenie archiwum narzędziem
dostarczanym w dystrybucji JDK a mianowicie: JAR. Wywołanie polecenia jar z
odpowiednimi przełącznikami i atrybutami umożliwia liczne operacje na archiwach.
Przykładowe opcje:
-c
stwórz nowe archiwum
-t
pokaż zawartość archiwum
-u
pobierz podane pliki z archiwum
-f
określenie nazwy archiwum
-O
stwórz archiwum bez domyślnej kompresji plików metodą ZIP
W celu stworzenia archiwum z wszystkich klas zawartych w bieżącym katalogu i
nadać mu nazwę JediArchiwum można wywołać polecenie:
j jar -cf Jed i iArch i iwum *.c l lass
Tak stworzone archiwum można przejrzeć: jar –tf JediArchiwum, lub odtworzyć: jar –
xf JediArchiwum.
5-4
Jacek Rumi ń ski - J ę zyk JAVA –
-x
aktualizuj archiwum
Jacek Rumi ń ski - J ę zyk JAVA – Rozdzia ł 5
W celu wykorzystania apletu, którego kod jest zawarty w pliku archiwum trzeba
wykorzystać pole ARCHIVES i nadać mu wartość nazwy pliku archiwum np.:
code=Jedi2 archives=JediArchiwum.jar. Należy pamiętać o tym, że w polu code
podaje się tylko nazwę klasy apletu bez rozszerzenia *.class.
W celu demonstracji omówionych zagadnień rozbudujmy aplet, a właściwie
wywołujący go kod HTML z przykładu 1.4:
Przykład 5.1:
// Jedi2.java :
import java.applet.Applet;
import java.awt.*;
public class Jedi2 extends Applet{
public void paint(Graphics g){
g.drawString( ”Rycerz Luke ma niebieski miecz. „, 15,15);
} // koniec public class Jedi2.class extends Applet
------------------------------------------------------------------
Jedi2n.html :
<html>
<head>
<title> Przykładowy aplet</title>
</head>
<body>
<applet code=Jedi2.class name= aplecik
width=200 height=100
alt=”Aplet drukujący tekst”
align=middle
hspace=5 vspace=5>
Tu pojawia się aplet
</applet>
</body>
</html>
Łatwo zauważyć, że opis i znaczenie pól dla elementu APPLET w HTML jest
podobne jak dla elementu IMG. Spośród wymienionych pól konieczne do
zastosowania w celu opisu apletu są pola CODE oraz WIDTH i HEIGHT. Te ostatnie
dwa są wymagane przez program appletviewer, niemniej w niektórych
przeglądarkach istnieje możliwość wprowadzenia opisu apletu bez podania rozmiaru
okna apletu. Czy będzie wówczas wygenerowane domyślne okno? Tak, obszarem
okna będzie wolne pole edycyjne dostępne przeglądarce (zależne od rozdzielczości
ekranu). Oczywiście nie jest to właściwe działanie, i ważne jest ustawianie pól
WIDTH oraz HEIGHT.
5-5
Jacek Rumi ń ski - J ę zyk JAVA –
}
Jacek Rumi ń ski - J ę zyk JAVA – Rozdzia ł 5
Poniższy program ukazuje możliwość wykorzystania nazwy apletu oraz pobrania
rozmiaru apletu:
Przykład 5.2:
//Jedi2nn.java
import java.applet.Applet;
import java.awt.*;
}
public Dimension rozmiar(){
Dimension d = app.getSize();
return d;
}
}// koniec class Sith
public class Jedi2n extends Applet{
public void paint(Graphics g){
g.drawString("Rycerz Luke ma niebieski miecz.", 15,15);
Sith2n s = new Sith2n(this);
Dimension d = s.rozmiar();
String roz = new String("Szerokość="+d.width+
"; wysokość="+d.height);
g.drawString(roz,15,30);
g.drawString(info(),15,45);
}
public String info(){
Applet aplet=getAppletContext().getApplet("aplecik");
return (aplet.getCodeBase()).toString();
} // koniec public class Jedi2n extends Applet
//----------------------------------------------------------
//Jedi2nn.html:
<html>
<head>
<title> Przykładowy aplet</title>
</head>
<p> Oto aplet: </p>
<body>
<applet code=Jedi2n.class name= aplecik
width=200 height=100
alt="Aplet drukujący tekst"
align=middle
hspace=5 vspace=5 >
5-6
Jacek Rumi ń ski - J ę zyk JAVA –
class Sith2n{
Applet app;
Sith2n(Applet a){
this.app=a;
}
Jacek Rumi ń ski - J ę zyk JAVA – Rozdzia ł 5
Tu pojawia się aplet
</applet>
</body>
</html>
W przykładzie tym zastosowano metodę getSize () zwracającą obiekt klasy
Dimension zawierający pola szerokości (width) i wysokość (height) opisujące rozmiar
okna apletu. Metoda info () przekazuje tekst opisujący adres źródłowy apletu, którego
obiekt jest uzyskiwany przez odwołanie się do nazwy apletu. Jest to typowo
edukacyjny przykład (metoda info () mogła by być` zrealizowana tylko poprzez
odwołanie się do this.getCodeBase()).
Powyższy kod został rozbity na dwie klasy celem dodatkowego pokazania
możliwości pracy z archiwami. W celu stworzenia archiwum składającego się z
dwóch klas Jedi2n.class oraz Sith.class należy wywołać program jar:
j jar -cf Jed i iArch i iwum. j jar Jed i i2n.c l lass S i ith2n.c l lass
Po stworzeniu archiwum warto sprwdzić jego zawartość poprzez:
j jar -tf Jed i iArch i iwum. j jar
Tak przygotowane archiwum możemy wykorzystać do konstrukcji kodu HTML
wywołującego aplet Jedi2n:
//Jedi2nnn.html
<html>
<head>
<title> Przykładowy aplet</title>
</head>
<p> Oto aplet: </p>
<body>
<applet code=Jedi2n name= aplecik archives=JediArchiwum.jar
width=200 height=100
alt="Aplet drukujący tekst"
align=middle
hspace=5 vspace=5 >
Tu pojawia się aplet
</applet>
</body>
</html>
Oczywiście efekt działanie jest taki sam jak poprzednio.
Ostatnie pole w opisie apletu, które warto omówić to pole przechowujące parametr
apletu. Parametr jest skonstruowany poprzez dwa argumenty: name oraz value . W
polu name parametr przechowuje swoją nazwę, natomiast w polu value swoją
wartość. Konstrukcja parametru jest następująca:
<param name=Nazwa value=Wartość>
np.:
5-7
Jacek Rumi ń ski - J ę zyk JAVA –
Zgłoś jeśli naruszono regulamin