Title: Pakiety Javy, Java
1Pakiety Javy, Java
mgr inz. Michal Misiak
2Plan wykladu
- Obsluga wejscia/wyjscia (I/O API)
- Kolekcje
- Aplety
3Podstawy obslugi wejscia/wyjscia
- Mechanizm ten bazuje na standardowym mechanizmie
obslugi strumieni (stream) - Strumien I/O okreslony jest przez zródlo (input
source) oraz ujscie (output destination) - Strumien moze reprezentowac rózne rodzaje zródel
oraz ujsc np. pliki, urzadzenia, pamiec, inne
programy, etc - Strumienie moga wspierac rózne typy danych bajt,
obiekty, prymitywne typy danych, etc
4Strumienie wejsciowe/wyjsciowe
- Strumien wejsciowy sluzy do czytania porcji
danych, przychodzacych z innego zródla - Strumien wyjsciowy sluzy do zapisu porcji danych,
które zostana przeslane do ujscia
zródlo http//java.sun.com/docs/books/tutorial/es
sential/io/streams.html
5Strumienie Bajtowe (byte streams)
- Strumienie bajtowe wykorzystywane sa do
przesylania danych w postaci paczek 8 bitów - Wszystkie strumienie pochodza od klas
OutputStream i InputStream - Przyklad strumienia do pliku FileInputStream i
FileOutputStream - Przyklad 1(P1) KopowianieBajtow
- Funkcja read() zwraca wartosc int zamiast Byte,
poniewaz umozliwa to wykrycie sytuacji konca
strumienia. Read() zwraca wówczas -1. - Kazdy strumien musi zostac zamkniety close().
Zamkniecie strumienia powinno odbywac sie w
klauzuli finaly. Pozwala to uchronic przed
niepotrzebnymi wyciekami. - Pozostale typy strumieni bazuja na typie bajtowym
- Przyklad 1. Czytanie i zapisywanie strumieni.
Strumien wejsciowy
in
in.read()
a
int c
out.write(c)
out
Strumien wyjsciowy
6Strumienie znaków (character streams)
- Przechowywanie znaków w konwencji Unicode przez
JVM. Automatyczna konwersja lokalnych formatów do
Unicode, nie jest wymagane dodatkowe sprawdzanie
wyjsciowego formatu przez programiste - Nie jest bardziej zlozony niz strumien bajtów
- Wszystkie strumienie znakowe wyprowadzane sa z
klas Reader Writer. Np. dla plików FileReader
FileWriter - P2. CopyCharacters. Warto zauwazyc, ze zmienna
sluzaca do kopiowania jest podobnie jak w P1 typu
int. Róznica w P1 int bierze 8 bitów, w P2 int
bierze 16 bitów - Strumienie znakowe wykorzystuja sekwencje
- znak powrotu oraz znak konca linii (\r\n) tzw.
carriage-return i line-feed - lub jedno znakowy znak konca linii (\n) oraz
powrót (\r) - Zastosowanie powyzszych znaków pozwala pisac
programy na dowolne systemy operacyjne. - P3. Program CopyCharacters z uwzglednieniem konca
linii. Klasy BufferReader PrintWriter. Metody
readLine println
7Strumienie buforowane (Buffered Streams)
- Mala efektywnosc wykorzystania strumieni
niebuforowanych koniecznosc kazdorazowego
wolania metody wirte read przez system
operacyjny (koniecznosc uzyskania dostepu do
dysku, ograniczenia w wydajnosci sieci, etc) - Zwiekszenie efektywnosc po przez wykorzystanie
tzw. buffered streams na poziomie JVM. Dostep do
zasobów jest jednorazowy dla stosunkowo duzej
liczby danych. - Dane zapisywane sa w buforze. Jesli bufor staje
sie pelny wówczas wolane sa funkcje natywne dla
SO. Jesli bufor czytajacy jest pusty wówczas
wolane sa funkcje SO i bufor zostaje uzupelniony. - Mozliwosc konwersji niebuforowanego strumienia do
buforowanego - Przyklad inputStream new BufferedReader(new
FileReader("x.txt"))outputStream new
BufferedWriter(new FileWriter(y.txt")) - Klasy do tworzenia strumieni buforowanych
- BufferedInputStream BufferedOutputStream dla
typu bajt - BufferedReader BufferedWriters dla typu
character - Czyszczenie strumienia flushing
8Formatowanie
- Strumienie implementujace formatowanie sa
instancjami PrintWriter i PrintStream
(System.out, System.err) - Dwa poziomy formatowania
- print i println formatuja dane wyjsciowe w
standardowy sposób - format duze mozliwosci sparametryzowania
sposobu formatowania danych wyjsciowych - Metoda format zawiera zbiór parametrów
specyfikujacych sposób wyswietlenia argumentów
znajdujacych sie w tekscie - System.out.format("The square root of d is
f.n", i, r)
- Parametry konwertujace
- Format d formatuje wartosc intger do wartosci
dziesietnej - Format f formatuje wartosc typu float do
wartosci dziesietnej - n - generuje ciag znaków zakonczony specyficznym
dla danej platformy zakonczeniem linii. - Format x formatuje wartosc integer do wartosci
szesnastkowej - Format s traktuje kazda wartosc jako string
- Format tB formatuje integer jako nazwe miesiaca
Wiecej! http//java.sun.com/javase/6/docs/api/java
/util/Formatter.htmlsyntax
9Formatowanie zasady
Specyfikator formatu
- Precyzja jest to matematyczna dokladnosc dla
zmiennych typu float. Dla s i pozostalych
ogólnych konwersji jest to maksymalna dlugosc.
Liczba jest przycinana od prawej strony. - Dlugosc jest to minimalna dlugosc ciagu znaków.
Jesli potrzeba nastepuje uzupelnienie do
wymaganego minimum od lewej strony. - Flaga specyfikuje dodatkowe opcje formatowania.
Np. - okresla, ze liczba zawsze powinna byc
wyswietlana ze znakiem, a 0, ze 0 jest znakiem,
który bedzie powtarzany w przypadku uzupelniania.
. oznacza format liczby z specyficznym dla
danej platformy separatorem. - Indeks argumentu pozwala na bezposrednie
wskazanie zmiennej, do której tyczy sie dany
format.
Flaga
Precyzja
Liczba znaków
Indeks argumentu
Rodzaj konwersji
Znak poczatku formatowania
Przyklad System.out.format("f, 1020.10f n",
Math.PI)
3.141593, 00000003.1415926536
10I/O dla konsoli
- Standardowy strumien charakterystyczne dla
wielu systemów operacyjnych. Dane czytaja z
klawiatury i wyswietlaja na konsoli. Wspieraja
równiez I/O na plikach pomiedzy programami. - JVM wspiera trzy strumienie
- Standard Input System.in
- Standard Output System.out (PrintStream)
- Standard Error System.err (PrintStream)
- Strumienie zarzadzane przez JVM sa tworzone
automatycznie i nie jest wymagane ich otwieranie - System.out i System.err sa strumieniami bajtowymi
natomiast maja cechy strumieni znakowych. - System.in, zeby wspierac cechy strumieni znaków
musi zostac opakowany. - InputStreamReader cin new InputStreamReader(Syst
em.in)
11Konsola
- Bardziej zawansowana wersja strumieni. Umozliwia
m.in. Wprowadzanie hasel. - Nie zawsze jest dostepna. Jesli metoda
System.console() zwróci null wówczas dany SO nie
wspiera konsoli lub program zostal uruchomiony w
nieinteraktywnym otoczeniu. - Wprowadzanie hasel w bezpieczny sposób
realizowane przy pomocy metody readPassword.
Metoda ta gwarantuje - Przykrycie wprowadzanego hasla na ekranie
- Szybkosc usuniecia z pamieci, gdyz metoda zwraca
tablice znaków, która moze byc od razu nadpisana,
a nie String - Przyklad 3 (P3) (linux)
12Strumienie danych (data streams)
- Wspieraja bitowa reprezentacje podstawowych typów
- Implementuja interfejs DataInput lub DataOutput
- Przyklad
- Utworzenie strumienia do zapisu
- out new DataOutputStream(new BufferedOutputStrea
m(new FileOutputStream(dataFile))) - Zapis do strumienia porcji danych
- out.writeDouble(tablei)
- out.writeUTF(table2i) - zapis z uzyciem
kodowania UTF-8 - Utworzenie strumienia do czytania
- in new DataInputStream(new BufferedInputStream(n
ew FileInputStream(dataFile))) - Odczyt porcji danych ze strumienia
- int libcza in.readInt()
- String znak in.readUTF()
- DataStreams wykrywaja koniec pliku i informuja o
tym fakcie po przez rzucenie wyjatku
EOFException - Do programisty nalezy odpowiednio sekwencyjne
uzywanie funkcji read i wirte przypisanych
wybranym formatom
13Serializacja
- Proces konwersji instancji obiektu, który posiada
referencje na inne obiekty do postaci liniowego
strumienia bitów. Zachowanie stanu obiektu. - Po serializacji obiekt moze zostac przeslany
przez siec (gniazda) i odtworzony po drugiej
stronie. - Serializacja jest mechanizmem standardowo
uzywanym przez RMI. - Programista, który chce poslugiwac sie tym
mechanizmem musi zaimplementowac interfejs
Serializable. Wiekszosc klas podstawowych posiada
zaimplementowany interfejs Serializable.
14Strumienie obiektów
- Wspieraja przesylanie obiektów.
- Klasami implementujacymi strumienie obiektów sa
ObjectInputStream i ObjectOutputStream. Obiekty
te implementuja ObjectInput ObjectOutput, które
dziedzicza po DataInput/Output. Podstawowe metody
z DataStream zaimplementowane sa w tych klasach. - Istotne metody writeObject readObject.
- Metoda readObject musi pozwolic na konstrukcje
obiektu, który mógl zawierac wskazania na inne
obiekty, a te obiekty moga miec referencje na
inne, etc - Metoda writeObject tworzy drzewo obiektów i
zapisuje do strumienia. Czasami wywolanie tej
metody moze spowodowac zapis duzej ilosci danych.
15Strumienie plików
- Ulatwiaja niezalezna od platformy obsluge plików
(zmiana nazwy, zmiana atrybutów, kasowanie). - Instancja typu File odwoluje sie do nazwy plików.
Nie warunkuje to istnienia pliku. - Utworzenie zmiennej reprezentujacej plik
- File a new File(plik.txt")
- Rózne zachowanie metody klasy File w zaleznosci
od systemu operacyjnego np. AbsolutePath(). - Tworzenie sciezki charakterystycznej dla danego
SO (wykorzystanie File.separtor) - File b new File(".." File.separator
przyklad" File.separator plik.txt") - Przyklad 4 (P4).
- Koncepcja Random Access File
- Przyklady metod klasy File
- Usuwanie
- delete natychmiastowe usuniecie pliku
- deleteOnExit plik jest usuwany w momencie
zakonczenia dzialania JVM - Informacje o pliku
- Ustawianie atrybutów
- setLastModified
- Zmiana nazwy pliku
- renameTo()
- Praca z katalogami
- Mkdir tworzenie katalogów
- List i ListFiles listuje zawartosc katalogów
16Kolekcje (Collection)
- Kolekcja jest to obiekt, który gromadzi i
przechowuje zbiór innych obiektów porzadkujac je
w okreslony sposób tworzy strukture danych. - Przykladami kolekcji sa Vector, Hashtable,
tablica (array) - Szkielet kolekcji (Collection Framework - CF)
jest to architektura pozwalajaca na manipulowanie
oraz reprezentowanie dowolnych zbiorów.
Przykladem takiego szkieletu kolekcji jest STL w
C. - Elementami Collection Framework sa
- Interfejsy. Pozwalaja na abstrakcyjne
manipulowanie przechowywanymi danymi. - Implementacje. Konkretne implementacje
interfejsów. Sa to gotowe do uzycia struktury
danych. - Algorytmy. Sa to metody, które moga byc
wykonywane na obiektach, które implementuja
interfejsy collection framework np. szukanie,
sortowanie. - Kolekcje byly uwazane jako malo wydajne podejscie
do reprezentacji struktur danych.
17Korzysci ze stosowania kolekcji
- Redukcja nakladu pracy poswiecanego na tworzenie
struktur danych i implementacje algorytmów.
Wykorzystanie standardowych kolekcji pozwala na
latwiejsza integracje - Zwiekszenie szybkosc wykonywania programu oraz
jego jakosci. Collection Framework posiada
efektywnie zaimplementowane algorytmy oraz
struktury danych. Programista moze sie skupic na
ulepszaniu samego programu. - Zmniejsza wysilki potrzebne na poznanie nowych
API. - Brak koniecznosci projektowania nowych API
zastosowanie wczesniej stworzony przez
specjalistów standardow. - Wielokrotne wykorzystanie kodu.
18Interfejsy w CF
- Dwa drzewa kolekcji
- Set jest specjalizowana kolekcja Collection, a
SortedSet jest specjalizowana kolekcja Set - Wszystkie kolekcje sa generyczne (mozliwosc
uzycia dowolnego typu) - public interface CollectionltEgt...
- Przy deklarowaniu kolekcji nalezy wskazac typ.
Gwarantuje to mozliwosc wykrycia bledu na
poziomie kompilacji - Zrozumienie stosowania interfejsów kluczem do
korzystania z CF
19Interfejsy CF
- Collection grupa obiektów nazywanych
elementami. Obiekty te moga sie duplikowac, moga,
ale nie musza byc posortowane. - Set nie moze zawierac takich samych dwóch
elementów. Modeluje matematyczna abstrakcje
zbioru. - SortedSet zbiór uwzgledniajacy porzadek.
- List uporzadkowany zbiór. Moze zawierac dwa
takie same elementy. Uzytkownik moze decydowac,
gdzie dany element zostanie wstawiony (na
podstawie indeksu).
- Queue kolejka elementów. Moze byc FIFO lub
LIFO. Elementy moga byc ustawiane z priorytetami. - Map pozwala przypisywac kluczom okreslone
wartosci. Nie moze zawierac duplikujacych sie
kluczy. - SrotedMap Map uwzgledniajacy kolejnosc
elementów zgodnie z malejacymi/rosnacymi
wartosciami klucza.
20Collection
- Ma zastosowanie w przypadku, gdy jest wymagana
duza ogólnosc dotyczaca sposobu uporzadkowania
oraz unikatowosci elementów - Posiada konstruktor pozwalajacy na konwersje to
szczególnej kolekcji. - ListltStringgt list new ArrayListltStringgt(c)
- public interface CollectionltEgt extends
IterableltEgt - // podstawowe operacje
- int size()
- boolean isEmpty()
- boolean contains(Object element)
- boolean add(E element) //optional
- boolean remove(Object element)
- IteratorltEgt iterator()
- // masowe operacje
- boolean containsAll(Collectionlt?gt c)
- boolean addAll(Collectionlt? extends Egt c)
- boolean removeAll(Collectionlt?gt c)
- boolean retainAll(Collectionlt?gt c)
- void clear()
- // operacje na tablicach
- Object toArray() ltTgt T toArray(T a)
21Przechodzenie przez Collection
- For-each
- Proste przejscie przez cala kolekcje
- for (Object o collection) System.out.println(o)
- Iterators
- Mozliwosc przechodzenia przez kolekcje i usuwania
pozadanych elementów - Iterator zostaje pobrany po przez wywolanie
metody kolekcji iterator - Umozliwia usuniecie aktualnego elementu w
przeciwienstwie do for-each
public interface IteratorltEgt boolean
hasNext() E next() void remove()
Interfejs
Polimorficznosc kodu!!!
static void filter(Collectionlt?gt c) for
(Iteratorlt?gt it c.iterator() it.hasNext() )
if (!cond(it.next())) it.remove()
Przyklad
22Set
- Zawiera metody odziedziczone z Collection i
dodaje, te które uniemozliwiaja istnienie dwóch
takich samych elementów. - Specyficzne zachowanie metod equals and hashCode
- Przykladowe implementacje
- HashSet przechowuje elementy w tablicy. Bardzo
wydajne jednak nie gwarantuje kolejnosci
iteracji. - TreeSet przechowuje elementy w drzewie
czerwono-czarnym. Kolejnosc na podstawie
wartosci. Wolniejsze niz HashSet. - LinkedHashSet zaimplementowany jako tablica z
lista. - Przyklad
- CollectionltTypegt noDups new HashSetltTypegt(c)
- public interface SetltEgt extends CollectionltEgt
- // podstawowe operacje
- int size()
- boolean isEmpty()
- boolean contains(Object element)
- boolean add(E element)
- boolean remove(Object element)
- IteratorltEgt iterator()
- // operacje zbiorcze
- boolean containsAll(Collectionlt?gt c)
- boolean addAll(Collectionlt? extends Egt c)
- boolean removeAll(Collectionlt?gt c)
- boolean retainAll(Collectionlt?gt c)
- void clear()
- Object toArray()
- ltTgt T toArray(T a)
23Podstawowe operacje na Set
- Uwagi!
- uzywaj typu Set zamiast konkretnego typu jak np.
HashSet. Pozwoli to na elastyczniejsze
programowanie po przez wykorzystanie polimorfizmu -
import java.util. public class FindDups
public static void main(String args)
SetltStringgt s new HashSetltStringgt()
for (String a args) if (!s.add(a))
System.out.println("Duplicate
detected " a) System.out.println(s.si
ze() " distinct words " s)
Przyklad
Zródlo Java Sun Tutorial
24List
- List uwzglednia nastepujace rodzaje operacji na
kolekcji - dostep do wskazanego elementu (positional access)
- Szukanie
- Iteracje
- Widok zakresu
- Java dostarcza dwa rodzaje implementacji List
- ArrayList stosunkowo wydajna
- LinkedList lepsza wydajnosc przy okreslonych
warunkach. - Porównanie do wektora
- Dlugosc nazw metod umieszczajacych elementy w
kolekcji setElement(), a w List set() - Ta sama metoda set dla wstawiania elementów na
okreslonej pozycji - Iteracja w List moze odbywac sie w dwóch
kierunkach
- public interface ListltEgt extends CollectionltEgt
- // dostep do danej pozycji
- E get(int index)
- E set(int index, E element)
- boolean add(E element)
- void add(int index, E element)
- E remove(int index)
- boolean addAll(int index,
- Collectionlt? extends Egt c)
- int indexOf(Object o)
- int lastIndexOf(Object o)
- ListIteratorltEgt listIterator()
- ListIteratorltEgt listIterator(int index)
- ListltEgt subList(int from, int to)
25Podstawowe operacje na List
- Zaimplementowane algorytmy
- sort sortuje liste z wykorzystaniem algorytmu
sortowania przez scalanie. - shuffle losowa permutacja elementów
- reverse odwórcenie kolejnosci elementów w
liscie - rotate rotacja elementów z okreslona
odlegloscia - swap zamiana dwóch elementów miejscami
- replaceAll zamiana wszystkich wystapien
okreslonej wartosci przez inna wartosc - fill - nadpisanie kazdego elementu posiadajacego
okreslona wartosc - copy utworzenie kopi listy
- binarySearch przeszukiwanie z algorytmem
drzewa binarnego - indexOfSubList indeks pierwszej pod listy,
która jest równa danej liscie - lastIndexOfSubList zawraca indeks ostatniej
podlisty, która jest równa danej liscie
public static ltEgt void swap(ListltEgt a, int i, int
j) E tmp a.get(i) a.set(i,
a.get(j)) a.set(j, tmp)
Przyklad
Uwagi! Powyzszy przyklad implementuje metode
zamiany miejscami dwóch wybranych elementów.
public static ltEgt void swap(ListltEgt a, int i, int
j) E tmp a.get(i) a.set(i,
a.get(j)) a.set(j, tmp)
Przyklad
Uwagi! Powyzszy przyklad pokazuje sposób
wykonania iteracji wstecz.
26Queue
- Kolejka przechowuje elementy w kolejnosci do
przetwarzania. - Dwa rodzaje kolejek
- zwraca okreslana wartosc, gdy operacja sie nie
powiedzie - rzuca wyjatkiem, gdy operacja sie nie powiedzie
- Element na poczatku bedzie elementem usuwanym
jako pierwszy (LIFO) lub jako ostatni (FIFO) - Kolejki moga miec okresla liczbe elementów
(bounded) - Pobieranie i usuwanie elementów
- poll
- Remove
- Pobieranie elementu bez usuwania
- peek
- element
- public interface QueueltEgt extends CollectionltEgt
- E element()
- boolean offer(E e)
- E peek()
- E poll()
- E remove()
27Queue - przyklad
Przyklad pokazujacy sposób implementacji licznika
odliczajacego w dól.
import java.util. public class Countdown
public static void main(String args)
throws InterruptedException int time
Integer.parseInt(args0) QueueltIntegergt
queue new LinkedListltIntegergt() for
(int i time i gt 0 i--)
queue.add(i) while (!queue.isEmpty())
System.out.println(queue.remove())
Thread.sleep(1000)
Przyklad
Zródlo Java Sun Tutorial
28Map
- Trzy rodzaje implementacji Map
- HashMap
- TreeMap
- LinkedHashMap
- Dwa slowniki sa równe jesli dla odpowiednich
kluczy wartosci ich sa sobie równe. - Utworzenie obiektu slownika
- MapltString, Integergt m new HashMapltString,
Integergt() - Dostepne widoki po przez klucz, po przez
wartosci i po przez wartosci oraz klucz. - Iteracja moze odbywac sie wylaczenie po przez
widoki - for (KeyType key m.keySet()) System.out.println(
key) - for (Map.EntryltKeyType, ValTypegt e
m.entrySet()) System.out.println(e.getKey() "
" e.getValue())
- public interface MapltK,Vgt
- // podstawowe operacje
- V put(K key, V value)
- V get(Object key)
- V remove(Object key)
- boolean containsKey(Object key)
- boolean containsValue(Object value)
- int size()
- boolean isEmpty()
- // operacje zbiorcze
- void putAll(Maplt? extends K, ? extends Vgt m)
- void clear()
- // konwersja
- public SetltKgt keySet()
- public CollectionltVgt values()
- public SetltMap.EntryltK,Vgtgt entrySet()
- // interfejs dla elemtów entrySet
- public interface Entry
- K getKey()
29Aplety
- Aplety sa to programy, dla których srodowiskiem
wykonawczym jest przegladarka - Aplet musi byc podklasa java.applet.Applet lub
wersja java.applet.JApplet, w przypadku uzywania
kontrolek Swing. - Aplet w poczatkach Javy pozwalal na latwa
dystrybucje programów, bez koniecznosci
przeprowadzenia procesu instalacji. - Aplety wykonywane sa w restrykcyjnym bezpiecznym
obszarze (sandbox). - W prowadzenie Java Web Start zmniejszylo
znaczenie apletów.
- Umieszczanie apletów na stronie HTML
- ltapplet codeAppletWorld.class width"200"
height"200"gtlt/appletgt - Mozliwosc wykonania apletu poza przegladarka
- appletviewer AppletWorld.html
- Aplet standardowo uruchamiany i zarzadzany jest
przez plug-in do przegladarki.
30Konwersja aplikacji do apletu
- Aplikacja jest programem tzw. stand-alone, gdzie
punktem wejscia jest funkcja main. - Aplet nie posiada metody main. Posiada kilka
metod, które sa wolane na róznych etapach
wykonywania apletu
- Kroki do przeksztalcenia aplikacji w aplet
- Utworzenie podklasy java.applet.Applet
- Nadpisanie metody Init, która inicjalizuje
wykonanie apletu, podobnie jak main - Implementacja metody Init powinna uwzgledniac
fakt, ze moze byc wolana wielokrotnie. - Elementy GUI w Aplecie dodawane sa bezposrednio
do niego.
31Cykl zycia apletu
- Ladowanie apletu
- Utworzenie instancji podklasy Applet
- Inicjalizacja apletu
- Uruchomienie apletu
- Zatrzymanie apletu
- Aplet zostaje zatrzymany w przypadku, gdy
uzytkownik opuszcza strone z apletem. Wówczas
wolana jest funkcja stop. - Przeladowanie apletu
- Jest wyjscie z apletu i ponowne zaladowanie
apletu przez przegladarke - Przy wyjsciu z apletu wolana jest funkcja stop
oraz nastepuje zwolnienie zasobów
32Cykl zycia apletu
- Funkcje cyklu zycia apletu
- init inicjalizacja apletu. Powinien zawierac
kod, który normalnie umieszczany jest w
konstruktorze, a umieszczane w nim metody powinny
miec krótki czas wykonywania. - start jest wolana w celu uruchomienia apletu w
przypadku gdy jest ladowany aplet badz kiedy
uzytkownik powraca na strone. W tej metodzie
powinny zostac uruchomione watki. - stop zatrzymanie wykonywania apletu, w momencie
gdy uzytkownik opuszcza strone badz zamyka
przegladarke. - destroy zwolnienie zasobów, przygotowanie do
wylaczenia apletu. Nie ma gwarancji, ze metoda
zostanie wykonana (!). - Nie kazdy aplet wymaga nadpisania wszystkich metod
33Rysowanie
- Rysowanie realizowane jest przez metode paint
- Applet dziedziczy metode paint z AWT z klasy
Container
- public void paint(Graphics g)
- g.drawRect(0, 0,
- getWidth() - 1,
- getHeight() - 1)
- g.drawString(buffer.toString(), 5, 15)
34Przechwytywanie zdarzen
- Aplet dziedziczy metody do obslugi zdarzen z
klasy Container - processKeyEvent
- processMouseEvent
- processEvent przechwytuje kazdy rodzaj zdarzen
- Przyklad
35Komponenty UI
- Przycisk (javax.swing.JButton)
- Checkboxes (javax.swing.JCheckBox)
- Pojedyncza linia tekstu (javax.swing.JTextField)
- Obszar tekstu (javax.swing.JTextArea)
- Etykieta (javax.swing.JLabel)
- Lista (javax.swing.JList)
- Okno wyskakujace tzw. pop-up (javax.swing.Popup)
- Scrollbars (javax.swing.JScrollBar)
- Sliders (javax.swing.JSlider)
- Plótno przestrzen do rysowania
(java.awt.Canvas) - Menu (javax.swing.JMenu,javax.swing.JMenuBar
javax.swing.JMenuItem, javax.swing.JCheckBoxMenuIt
em) - Kontenery (javax.swing.JPanel, javax.swing.JWindow
and its subclasses)
- Metody do zarzadzania komponentami
- add
- remove
- setLayout
36Bezpieczenstwo
- Poziomy bezpieczenstwa dla danego apletu
implementowane sa niezaleznie przez kazda
przegladarke - Restrykcje nakladane przez aplety
- Aplet nie moze byc ladowac bibliotek, ani
definiowac natywnych metod - Nie moze standardowo czytac ani zapisywac plików
na dysku komputera, na którym jest wykonywany - Nie moze tworzyc polaczenia poza komputerem, z
które zostal pobrany - Nie moze uruchamiac programu, na komputerze, na
którym jest zainstalowany - Nie moze czytac wlasciwosci systemu operacyjnego
- Wyglad okna apletu rózni sie od wygladu okna
aplikacji - Kazda przegladarka implementuje Security Manager,
w którym mozna zmieniac moc ograniczen. W
przypadku, gdy SM uzna, ze zostaly naruszone
ograniczenia, rzuci wyjatkiem SecurityException
37Wyswietlanie informacji w statusie
- Mozliwosc wyswietlania informacji w pasku statusu
- showStatus("MyApplet Loading image file "
file) - W pasku stanu nie powinny byc wyswietlane
krytyczne informacje. Warto natomiast wyswietlic
informacje na temat statusu ladowanych obrazków,
zródel, etc
38Wyswietlanie dokumentów
- Aplet oferuje mozliwosc wyswietlania
sformatowanych dokumentów HTML - Do wyswietlania dokumentu sluza ponizsze metody
wykonywane na AppletContext - public void showDocument(java.net.URL url)
- public void showDocument(java.net.URL url, String
targetWindow) - Wartosci dla parametru targetWindow blank,
windowName, _self, _parent, _top
39Odtwarzanie dzwieków
- JApplet oraz AudoClip znajdujace sie w pakiecie
java.applet umozliwiaja odtwarzanie dzwieków w
formacie 8 bit, µ-law, 8000 Hz, mono, Sun ".au" - Tworzenie muzyki zapisanej w formacie .au
umozliwia audiotool
- getAudioClip(URL), getAudioClip(URL, String)
zwraca obiekt, który implementuje interfejs
AudioClip - play(URL), play(URL, String) odgrywa zasób
umieszony pod wskazanym linkiem. - Interfejs AudioClip definiuje nastepujace metody
- Loop rozpoczyna ciagle odtwarzanie dzwieku.
- Play odgrywa dzwiek jednokrotnie
- Stop zatrzymuje odtwarzanie pliku
Przyklad http//java.sun.com/docs/books/tutorial/
deployment/applet/sound.html
40Parametry