Informatyka I Podstawy programowania GUI niskiego poziomu. APLETY. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018
Aplety Java Aplet (ang. Applet) program z interfejsem graficznym dedykowany do wykonania w oknie przeglądarki internetowej Rozszerza funkcjonalność stron WWW w zakresie graficznych aplikacji, interakcji z użytkownikiem, komunikacji sieciowej itp. Ma ograniczony dostęp do zasobów komputera (wirtualne środowisko) Wymaga posiadania JRE na komputerze
Infrastruktura otoczenia apletów Aplet Wirtualny dysk Wirtualna pamięć JRE Wirtualny procesor Przeglądarka WWW Stacja robocza Środowisko uruchomieniowe
Struktura apletu Java Aplet Java powinien posiadać przynajmniej jedną klasę typu public Aplet może korzystać z klas pomocniczych public KlasaGłównaApletu Klasy pomocnicze Aplet Java
Metody uruchomienia apletów Java W oknie przeglądarki jako część strony internetowej (jedna strona może uruchamiać wiele apletów) Za pomocą narzędzia do testowania apletów AppletViewer (środowisko NetBeans lub inne) Apletu nie można uruchomić jako samodzielnego programu
Klasa główna apletu Java Klasa główna apletu jest pochodną klas java.applet lub java.swing.japplet Klasa java.applet LUB Klasa główna apletu Klasa java.swing.japplet Dziedziczenie
Cykl życia apletu init() inicjalizacja zatrzymany start() start() stop() destroy () aktywny finalizacja
Metody apletu init() Jednokrotnie wołana metoda przy ładowaniu apletu do pamięci komputera (otwarcie strony internetowej) Jednorazowa inicjalizacja obiektów apletu start() Metoda wołana za każdym razem kiedy okno ze stroną apletu staje się aktywne stop() Metoda wołana gdy okno przeglądarki z apletem staje się nieaktywne (minimalizacja, otwarcie nowego okna itp.) destroy() Metoda wołana jednokrotnie gdy aplet kończy swoje działanie Używana jest do zwolnienia zajętej pamięci oraz niszczenia obiektów (nieobowiązkowo)
Interfejsy użytkownika apletu Java Interfejs graficzny: obiekt klasy Graphics (biblioteka AWT) Formatki GUI wysokiego poziomu (biblioteka Swing) Interfejs obsługi zdarzeń myszy MouseListener MouseMotionListener Interfejs obsługi zdarzeń klawiatury KeyListener
Interfejs graficzny apletu metoda paint(graphics g) Rysuje zawartość okna apletu z wykorzystaniem kontekstu graficznego g Metoda jest wołana przy każdej zmianie wymagającej odświeżania informacji w oknie metoda repaint() Wymusza odświeżanie całego okna repaint( parametry ) wymusza odświeżanie wybranego obszaru okna
Klasa Graphics Klasa Graphics reprezentuje obszar logiczny (tzw. kontekst urządzenia graficznego) do rysowania prymitywnych obiektów graficznych Egzemplarza klasy Graphics nie można stworzyć jest on przekazywany użytkownikowi automatycznie w postaci argumentu metody (paint, print, etc.)
Oś rzędnych Y Układ współrzędnych Graphics (x,y) = (0, 0) Oś odciętych X Początek układu współrzędnych (0, 0)
getheight() Rozmiar okna apletu Można zmienić za pomocą metody setsize( szerokość, wysokość ) Wymiary przestrzeni graficznej można sprawdzić na bieżąco za pomocą metod getwidth() getheight() getwidth()
Zasady rysowania obiektów graficznych Kontury obiektów są rysowane za pomocą metod draw drawline, drawrect, drawellipse, Obiekty wypełniane kolorem są rysowane za pomocą metod fill fillrect, fillellipse, Tekst jest wyświetlany z użyciem wybranej czcionki (ang. Font) oraz koloru
Klasa java.awt.color Reprezentuje kolor z palety 16 mln kolorów Składniki: R(ed), G(reen), B(lue) Każdy składnik może przybierać wartość od 0 do 255 0 = brak koloru 255 = maksymalna intensywność koloru Kolory predefiniowane: Color.RED, Color.ORANGE,. Kolor losowy Random r = new Random(); Color k = new Color( r.nextint(256), r.nextint(256), r.nextint(256) );
Przykłady rysowania konturów obiektów drawline( x1, y1, x2, y2 ) Rysuje ciągła linię z punktu o współrzędnych (x1, y1) do punktu o współrzędnych (x2, y2) drawrect( x1, y1, width, height ) Rysuje prostokąt o współrzędnych lewego górnego roku ( x1, y1 ) i wymiarach width x height drawoval(x1, y1, width, height ) Rysuje owal wpisany do prostokąta o wymiarach i pozycji j.w. drawpolygon( X[], Y[], count ) Rysuje wielobok zadany poprzez zbiór wierzchołków (tablica X, Y)
Przykłady wypełniania obiektów Obiekty są wypełniane bieżącym kolorem Zmiana bieżącego koloru setcolor( Color ) Przykłady: fillrect( x1, y1, width, height ) filloval(x1, y1, width, height ) fillpolygon( []X, []Y, count )
Wyświetlanie tekstu Wyświetla zawartość zmiennej tekst w pozycji (x, y) za pomocą bieżącej czcionki drawstring( tekst, x, y ) Tworzenie nowej czcionki Font f = new Font("Calibri", Font.BOLD, 72) Zmiana bieżącej czcionki w obiekcie Graphics g.setfont( f )
Kalkulacja wymiarów tekstu Wymiary tekstu na ekranie zależą od: Rodzaju ekranu (obiekt Graphics) Wybranej czcionki Samego tekstu (szerokości znaków są różne!) Należy pobrać obiekt FontMetrics i sprawdzić jego właściwości, np.: int cx = g.getfontmetrics(f).stringwidth("witam");
Wyświetlanie obrazków Zadeklarować obiekt klasy Image Image samolot; Załadować obrazek z pliku graficznego za pomocą klasy ImageIcon samolot = new ImageIcon("samolot.png").getImage(); Wyświetlić plik na ekranie g.drawimage(samolot, 50, 50, null);
Podstawy animacji Narysować bieżące położenie obiektów w metodzie paint() Odczekać dt msek. Thread.sleep( dt ) Zmienić położenie obiektów Wymusić odświeżanie panelu metodą repaint()
Kompilacja Kompilacja apletu Java Aplet kompiluje się do postaci kodu binarnego Kod binarny jest umieszczany na serwerze WWW Przeglądarka WWW pobiera plik apletu przy pierwszym wyświetleniu strony Aplet.java Aplet.class Strona WWW
Osadzanie apletu w kodzie HTML Znacznik <applet> lub <object> code codebase width height name align vspace hspace Nazwa klasy apletu (rozszerzenie *.class) Lokalizacja sieciowa (URL) plików *.class Szerokość okna apletu Wysokość okna apletu Nazwa apletu Wyrównanie apletu Odstęp w pionie od innych elementów na stronie Odstęp w poziomie od innych elementów na stronie
Parametry uruchomienia apletu Do apletu można przekazać dowolne parametry, wartości których mogą być zapisane w postaci tekstowej <APPLET codebase= > <param name= nazwa1 value= wartość1 /> <param name= nazwa2 value= wartość2 /> </APPLET>
Odczyt parametrów przez aplet Odczyt parametru odbywa się za pomocą funkcji getparameter( nazwa parametru ) która zwraca wartość typu String String imie = getparameter("imie") W razie konieczności przechowania danych innego typu, należy zadbać o konwersję typów
Bezpieczeństwo apletów Aplet - jako aplikacja aktywna - może stwarzać potencjalne zagrożenie dla komputera, na którym zostanie uruchomiony Dwa rodzaje zabezpieczenia apletów: Aplety podpisane cyfrowo (ang. signed) Aplety nie podpisane cyfrowo (ang. unsigned)
Aplety typu unsigned Aplety pochodzące z nieznanego źródła posiadają szereg ograniczeń, m. innymi: Brak dostępu do lokalnego systemu plików Brak możliwości kontaktowania się z serwerem innym niż serwer z którego pochodzą Brak dostępu do funkcji systemu operacyjnego Brak możliwości uruchomienia innych aplikacji itp.
Aplety typu signed Aplety podpisane cyfrowo z założenia pochodzą ze źródła zaufanego sprawdza tożsamość Klient Autor podpisuje Aplet Certyfikat wydaje Centrum Certyfik.
Aplety typu signed (c.d.) Aplet podpisany cyfrowo uzyskuje możliwości zbliżone do standardowych programów Podpis pozwala sprawdzić tożsamość autora lecz nie gwarantuje ochrony systemu przed błędami lub lukami w kodzie apletu Aplety napisane w starszych wersjach Java mogą posiadać poważne luki w zabezpieczeniach
Zalety apletów Java Łatwość programowania wystarczy znać język programowania Java Wieloplatformowość działa z większością współczesnych przeglądarek bez zmian w kodzie Nie obciążają serwera całkowicie wykonuje się po stronie klienta Szybkość ładowania potrafi się uruchamiać z pamięci podręcznej cache przeglądarki (bez pobierania z serwera)
Zalety apletów Java (c.d.) Szybkość działania zbliżona do szybkości działania zwykłych programów (m. innymi możliwość korzystania z bibliotek graficznych typu Open GL) Przechowanie stanu aplikacji (problem w klasycznych aplikacjach HTTP) Dostęp do zasobów lokalnych komputera dla podpisanych cyfrowo apletów (elastyczność) Możliwość wymiany danych z serwerem oraz częściowe przeniesienie przetwarzania danych na serwer
Wady apletów Nie są wspierane przez przeglądarki urządzeń mobilnych Wymagają instalowania komponentów Java na stacji roboczej (Java plug-in), co nie zawsze jest możliwe lub pożądane Przy pierwszym uruchomieniu aplet oczekuje na uruchomienie Java Virtual Machine długi czas pierwszego uruchomienia! Problemy bezpieczeństwa lokalnych danych
Tendencje współczesne Rozwój języka HTML sprawia iż coraz większą funkcjonalność strony WWW można zrealizować bez sięgania po dodatkowe narzędzia (takie jak Aplety) Przeglądarki internetowe stawiają coraz bardziej rygorystyczne wymagania co do bezpieczeństwa wykonywanych aplikacji (apletów) domyślnie większość rozszerzeń jest wyłączona
Języki programowania apletów Java (cross-platform) JavaScript + HTML5 (cross-platform) VBScript (tylko Internet Explorer) C / C++ (ActiveX, tylko Internet Explorer) Adobe Flash Formalnie jest dodatkiem (plug-in em) ale działa na podobnych zasadach Microsoft Silverlight etc.
Podsumowanie Aplety są najprostszym rodzajem aplikacji o możliwościach graficznych Klasa Graphics jest standardem dla graficznego interfejsu GUI niskiego poziomu Praktyczne zastosowania apletów są coraz rzadsze ze względu na rygorystyczne wymogi bezpieczeństwa przeglądarek oraz rozwój konkurujących technologii
Podsumowanie (c.d.) Obszarem potencjalnych zastosowań apletów Java mogą być sieci wewnętrzne (Intranet) firm, w których łatwiej jest o: Zapewnienie bezpieczeństwa uruchamianych skryptów (apletów) Standaryzację oraz jednolitą konfigurację przeglądarek Centralizowaną instalację identycznych wersji Java VM na każdej stacji roboczej
Przykłady pytań egzaminacyjnych Co to jest aplet? Czy aplet jest aplikacją samodzielną? Co jest wymagane w celu uruchomienia apletu w przeglądarce? Jak wygląda cykl życia apletu? Jak odbywa się komunikacja użytkownika z apletem? Wady i zalety apletów Bezpieczeństwo apletów