Uniwersytet dzki Wydzia Matematyki i Informatyki Katedra Analizy

  • Slides: 35
Download presentation
Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Dziedziczenie, AWT Java Wykład 4

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Dziedziczenie, AWT Java Wykład 4 mgr inż. Michał Misiak

Plan wykładu Java Web Start n Dziedziczenie (Inheritance) n Interfejsy, klasy abstrakcyjne n Polimorfizm

Plan wykładu Java Web Start n Dziedziczenie (Inheritance) n Interfejsy, klasy abstrakcyjne n Polimorfizm n AWT n Layout Manager n Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Java Web Start n Uruchamianie aplikacji Javy z pełną funkcjonalnością za pomocą jednego kliknięcia

Java Web Start n Uruchamianie aplikacji Javy z pełną funkcjonalnością za pomocą jednego kliknięcia ¨ n n n (http: //java. sun. com/docs/books/tutorial. JWS/deployment/webstart/examples/Note pad. jnlp) Pobieranie i uruchamianie aplikacji bez konieczności jakiejkolwiek instalacji dla różnych platform W przypadku, gdy aplikacja korzysta z innej wirtualnej maszyny niż dostępna lokalnie, maszyna ta zostanie pobrana i uruchomiona automatycznie Użytkownik może uruchomić aplikację poza przeglądarką. Aplikacja jest zapisana w pamięci podręcznej Java Web Start. Aplikacje z niezaufanych źródeł mogą być uruchamiane w bezpieczny sposób, ze względu na możliwość zdefiniowania restrykcji np. standardowo aplikacje nie mogą zapisywać danych lokalnie na dysku. Zapisanie aplikacji lokalnie w pamięci podręcznej gwarantuje zwiększenie wydajności Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Java Web Start (2) n Aplikacje przechowywane w pamięci podręcznej JWS można podejrzeć za

Java Web Start (2) n Aplikacje przechowywane w pamięci podręcznej JWS można podejrzeć za pomocą Java Cach Viewer ¨ n control paneljavageneral, view Przygotowanie aplikacji Java Web Start Rozszerzenie typów MIME obsługiwanych przez serwer o: application/x-java-jnlp-file ¨ Utworzenie pliku JNLP jako XML z określeniem wybranych tagów ¨ n opis tagów: http: //java. sun. com/docs/books/tutorial/d eployment/webstart/deploying. html Umieszczenie aplikacji w postaci JAR oraz pliku JNLP na serwerze ¨ Dostęp do elementów aplikacji (res) z wykorzystaniem funkcji get. Resource() ¨ <? xml version="1. 0" encoding="utf-8"? > <!-- JNLP File for Notepad --> <jnlp spec="1. 0+” codebase="http: //java. sun. com/docs/books/tutorial. JWS /deployment/webstart/examples/"href="Notepad. jnlp”> <information> <title>Notepad Demo</title> <vendor>The Java(tm) Tutorial: Sun Microsystems, Inc. </vendor> <description>Notepad Demo</description> <homepage href="http: //java. sun. com/docs/books/tutorial/deploy ment/webstart/running. html"/> <description kind="short">Click. Me. App uses 3 custom classes plus several standard ones</description> <offline-allowed/> </information> <resources> <jar href="Notepad. jar"/> <j 2 se version="1. 6+” href="http: //java. sun. com/products/autodl/j 2 se"/> </resources> <application-desc main-class="Notepad"/> </jnlp> Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Java Web Start (3) n n Aplikacje Java Web Start domyślnie uważane są za

Java Web Start (3) n n Aplikacje Java Web Start domyślnie uważane są za niezaufane (untrusted) Standardowe ograniczenia dla aplikacji JWS Brak dostępu do dysku lokalnego Pobieranie wszystkich JAR z tego samego serwera ¨ Aplikacja może realizować połączenia wyłączenie do serwera, z którego zostały pobrane pliki JAR ¨ Security Manager nie może być usunięty lub zamieniony ¨ Nie można używać bibliotek natywnych ¨ ¨ n n JNLP API: javax. jnlp Bezpieczeństwo Java Web Start: Aplikacje wykonywane w wydzielonym środowisku (sandbox) ¨ Aplikacje podpisane – mogą mieć szersze uprawnienia w lokalnym systemie. Sprawdzana jest integralność, niezaprzeczalność autentyczność ¨ Ustawienie poziomu bezpieczeństwa w pliku jnlp: ¨ <security><all-permissions/></security> Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Dziedziczenie FIGURA n n n n Dziedziczenie jest to mechanizm paradygmatu programowania obiektowego Przejmowanie

Dziedziczenie FIGURA n n n n Dziedziczenie jest to mechanizm paradygmatu programowania obiektowego Przejmowanie stanu (pola) oraz zachowań (metody) obiektu z którego się dziedziczy Tworzenie kategorii (generalization): Klasa bazowa stanowi kategorię (rodzinę typów) na bazie której mogą być tworzone inne typy Nadpisywanie (overriding): zmienianie znaczenia zachowania się typu, z którego dziedziczmy Ponowne wykorzystanie kodu (co-reuse), w innych typach. Dziedziczone są wszystkie elementy klasy nadrzędnej z wyjątkiem konstruktorów. Konstruktor klasy bazowej mogą być wołane z klasy, która dziedziczy. Odwołanie do członków klasy bazowej po przez „super”. Wołanie konstruktora klasy bazowej: super(); Dwa określenia: klasa bazowa (super klasa, nadklas) i klasa potomna (podrzędna, podklasa) Pole Obwód Pole x Pole Obwód y obwód Obwód promień Prostokąt Koło Pole … Obwód … … Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Jednokrotne dziedziczenie n n n W Javie można stosować wyłącznie jednokrotne dziedziczenie. Dziedziczenie wielokrotne

Jednokrotne dziedziczenie n n n W Javie można stosować wyłącznie jednokrotne dziedziczenie. Dziedziczenie wielokrotne może powodować nieścisłość – wymagana jest dyscyplina programisty oraz precyzyjna znajomość mechanizmów języka. Zachowanie polimorficzne możliwe do ociągnięcia po przez zastosowanie interfejsów. n Co można robić na poziomie podklasy: ¨ ¨ ¨ ¨ Dziedziczone pola mogą być używane bezpośrednio w podklasie Można deklarować zmienne w podklasie o nazwach takich jak w klasie bazowej. Niezalecane. Możliwość deklaracji pól w klasie podrzędnej, które nie są w klasie bazowej. Odziedziczone metody mogą być wykorzystywane w klasie podrzędnej bezpośrednio. Możliwość nadpisywania metod z klasy nadrzędnej po przez identyczną deklarację. Możliwość deklaracji metody statycznej w klasie podrzędnej, która przykryje metodę z klasy nadrzędnej Możliwość deklaracji nowych metod w podklasie. Możliwość napisania konstruktora w podklasie, który wywoła konstruktor klasy bazowej. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

typ Object – jako przykład klasy bazowej n n Klasa Object znajduje się na

typ Object – jako przykład klasy bazowej n n Klasa Object znajduje się na samej górze hierarchii dziedziczenia. Wszystkie obiekty dziedziczą po Object. Klasa Object udostępnia zbiór metod, które powinny w miarę potrzeby zostać przeładowane w tworzonych klasach. Jest ich ok. 50. Przykłady: ¨ protected Object clone() throws Clone. Not. Supported. Exception n ¨ public boolean equals(Object obj) n ¨ zawraca nazwę klasy. public int hash. Code() n ¨ wołana w przypadku, gdy obiekt jest niszczony przez Garbage Collector. public final Class get. Class() n ¨ wykorzystywana do porównania dwóch obiektów. W podstawowej implementacji tej metody użyto operatora „==„, który daje poprawne wyniki raczej dla typów prymitywnych (porównanie wyłącznie referencji, tzn. czy to ten sam obiekt). Dlatego znając specyfikę klasy należy przeładować tą metodę. protected void finalize() throws Throwable n ¨ Implementuje interfejs Clonable. zwraca adres w pamięci w postaci heksadecymalnej. public String to. String() Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Delegacja n n n Wykonanie zadania przez jakąś metodę jest wykonywane przez inną metodą

Delegacja n n n Wykonanie zadania przez jakąś metodę jest wykonywane przez inną metodą – jest do tej drugiej metody delegowane przez pierwszą metodę. Mechanizm używany w celu ułatwienia zarządzania kodem – wielokrotnego wykorzystania kodu. W Javie jest to niepełny mechanizm. W C# sprytnie zastosowany do obsługi zdarzeń. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Modyfikatory i rzutowanie obiektów n n n Podklasa nie dziedziczy elementów klasy bazowej z

Modyfikatory i rzutowanie obiektów n n n Podklasa nie dziedziczy elementów klasy bazowej z modyfikatorem private W przypadku dziedziczenia z klasy, która posiada klasę zagnieżdżoną, ta klasa zagnieżdżona ma dostęp do pól private klasy bazowej, w której jest zagnieżdżona a tym samym podklasa ma niebezpośredni dostęp do pól private klasy bazowej. Należy strać się stosować możliwe najbardziej restrykcyjny modyfikator dostępu. n n Możliwość rzutowania obiektu klasy podrzędnej na typ obiektu klasy bazowej; Możliwość wymuszonego rzutowania np. : ¨ ¨ ¨ Rower rower = new Rower(); Object obj = new Rower(); Rower new. Rower = obj; n ¨ n (BŁĄD) – kompilator nie wie do jakiego typu został przypisany błąd. Jeśli obj nie jest typu Rower zostanie rzucony wyjątek. Rower new. Rower = (Rower) obj; W celu zabezpieczenia się przed błędnym rzutowaniem można wykonać następujący test logiczny: if (obj instanceof Rower) { Rower my. Bike = (Rower)obj; } Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Tablica modyfikatorów – zakres widoczności Modyfikator Class Rozwiązanie Przykładu. Public Tak Modyfikator a Protected

Tablica modyfikatorów – zakres widoczności Modyfikator Class Rozwiązanie Przykładu. Public Tak Modyfikator a Protected Tak Public Tak Bez mod. *) Tak Protected Tak Private Tak Bez mod. *) Tak Package Subclass Poza Tak b Tak Tak Nie Tak subb Tak Nie Tak c Nie Tak Nie Nie *) Bez modyfikatora – jest to tzw. widoczność publiczna, ale wyłącznie ramach pakietu. Nie Nie Są Private to tzw. packag-private. Tak Pakiet. A Pakiet. B Przykład: Określić widoczność elementów klasy a po przez pozostałe klasy (b, subb, c) a subb b c Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Nadpisywanie i ukrywanie metod n n n Metoda Instancji z taką samą sygnaturą (nazwa

Nadpisywanie i ukrywanie metod n n n Metoda Instancji z taką samą sygnaturą (nazwa oraz lista parametrów) oraz z tym samym zwracanym typem nadpisuje (override) metodę z klasy bazowej Nadpisywanie pozwala korzystać z typów, które są dla nas prawie wystarczające natomiast częściowo chcemy zmienić ich zachowanie Przeładowana metoda może zwrócić typ, który jest podtypem metody, która została przeładowana Możliwość wykorzystania tagu @override w Java. Doc Metoda, która przeładowuje daną metodą może używać jedynie modyfikatorów silniejszych. Np. protected jeśli była public i priavte jeśli była public n n Metoda klasy (Class Method) z taką samą sygnaturą (nazwa oraz lista parametrów) oraz z tym samym zwracanym typem przykrywa (hide) metodę klasy bazowej Wersja metoda przykrytej, która faktycznie zostanie wywołana zależy od tego czy wołamy na klasie bazowej czy podklasie. Przykład dla metody klasy Natomiast w przypadku wystąpienia w podklasie pól o takich samych nazwach jak w klasie bazowej następuje ich przykrycie przez pola z podklasy. Odwołanie do tych pól możliwe jedynie przez „super” Uwaga! Jeśli nie chcemy, aby dana metoda została nadpisana należy ją zadeklarować z modyfikatorem final. Wiele metod z Object jest final. Również jeśli nie chcemy, aby dana klasa była rozszerzana stosujemy final. Przydatne w sytuacji, gdy implementujemy typy niemutowalne np. . String. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Polimorfizm n n Mechanizm paradygmatu programowania obiektowego Polimorfizm pozwala wirtualnej maszynie na określenie w

Polimorfizm n n Mechanizm paradygmatu programowania obiektowego Polimorfizm pozwala wirtualnej maszynie na określenie w trakcie wykonywania programu, która wersja metody powinna zostać wywołana. W trakcie kompilacji nie można stwierdzić jaką referencję będzie przechowywała zmienna typu computer to. String() notebook workstation Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Interfejsy n n n n Abstrakcyjny typ pozwalający na specyfikację interfejsów Obiekty definiują sposób

Interfejsy n n n n Abstrakcyjny typ pozwalający na specyfikację interfejsów Obiekty definiują sposób zachowania po przez metody jakie eksponują – określają tym samym swój interfejs. Wykorzystanie w klasie interfejsu wymaga implementacji wszystkich jego metod, chyba, że klasa jest klasą abstrakcyjną Interfejs deklaruje się za pomocą słowa kluczowego interface Interfejsy mogą zawierać jedynie metody oraz pola statyczne (definiowane jako static lub final). Można pominąć te modyfikaotry. Zastosowanie interfejsu w danej klasie oznaczane jest za pomocą słowa implements Pozwala na użycie obiektu, bez koniczności znajomości jego typu np. przy sortowaniu – nie musimy wiedzieć dokładnie jaki typ obiektu będzie sortowany. [modyfikator] interface Interface. Name [extends inne interfejsy] { //deklaracje stalych // deklaracje metod abstrakcyjnych } Przykład: public interface Zwierze { void jedz(jedzenie j); } public class Kot implements Zwierze { public boolean chase. Prey(Prey p) { // programming to chase prey p } public void eat. Prey (Prey p) { // programming to eat prey p } } Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Interfejsy (2) n n n Interfejsy wykorzystywane do realizowania mechanizmu callback. Oczywiście interfejs może

Interfejsy (2) n n n Interfejsy wykorzystywane do realizowania mechanizmu callback. Oczywiście interfejs może rozszerzać inne interfejsy. Interfejs może w przeciwieństwie do klas rozszerzać więcej niż jeden interfejs. Interfejs, który nie jest wyspecyfikowany jako public widoczny jest jedynie dla klas w tym samym pakiecie. Mają zastosowanie zasady widoczności dla modyfikatorów przy dziedziczeniu klas. Zalecenie! W przypadku rozszerzenia danego interfejsu o jakąś metodę należy stworzyć nowy interfejs udostępniający zakładaną funkcjonalność. Dodanie do uprzedniego interfejsu spowoduje wygenerowanie błędu w klasach, które go implementują. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasy abstrakcyjne n n n Klasa abstrakcyjna, to klasa zadeklarowana z modyfikatorem abstract Nie

Klasy abstrakcyjne n n n Klasa abstrakcyjna, to klasa zadeklarowana z modyfikatorem abstract Nie może być instancją natomiast może być dziedziczona Może ale nie musi zawierać metod abstrakcyjnych Natomiast klasa, która posiada metody abstrakcyjne musi być zadeklarowana jaka abstract Metoda abstrakcyjna to metoda, która nie ma ciała Klasa, która dziedziczy z klasy abstrakcyjnej musi implementować wszystkie metody klasy abstrakcyjnej lub być zadeklarowana jako abstract. //Przykład metody abstrakcyjnej abstract void do. Something(double zm 1, double zm 2); //przykład klasy public abstract class klasa. Abstrakcyjna { //deklaracja pól int zm 1; int zm 2; //deklarcja metod nieabstrakcyjnych public int suma(int x, int y){ return x+y; } //deklaracja metod abstrakcyjnych public abstract int roznica(int x, int y); } Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Interfejs vs klasy abstrakcyjne, przykład … n n W klasie abstrakcyjnej w przeciwieństwie do

Interfejs vs klasy abstrakcyjne, przykład … n n W klasie abstrakcyjnej w przeciwieństwie do interfejsów mogą być pola non-static oraz mogą być implementacje metod. Klasy abstrakcyjne mogą być wykorzystywane do koncepcji współdzielenia kodu. Obiekty graficzne posiadają pewien podobny zbiór stanów oraz zachowań Zamodelowanie w postaci hierarchii dziedziczenia z klasy abstrakcyjnej: ¨ ¨ n stan np. pola: aktualna. Pozycja zachowanie np. metody: przesun. Do(), odrysuj(), zmien. Rozmiar() Obiekt graficzny Koło Prostokąt linia krzywa Klasa abstrakcyjna może dziedziczyć niepełne zachowanie po interfejsie, tym samym nie musi implementować wszystkich metod interfejsu. Natomiast klasa, która dziedziczy po klasie abstrakcyjnej musi implementować pozostałe metody. Przykład: http: //www. developer. com/java/article. php/803891 Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Wprowadzenie do AWT n n n AWT – Abstract Window Toolkit, wykorzystywany do budowy

Wprowadzenie do AWT n n n AWT – Abstract Window Toolkit, wykorzystywany do budowy graficznych interfejsów AWT do obsługi elementów interfejsu użytkownika wykorzystuje natywne GUI. Wygląd GUI w tym przypadku jest analogiczny do GUI systemu operacyjnego, na którym uruchamiana jest aplikacja. Jest to tzw. ciężki typ kontrolek, gdyż wołane są odpowiednie funkcje systemowe Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Graphical User Interfece n n n GUI zbudowane jest z elementów graficznych nazywanych komponentami.

Graphical User Interfece n n n GUI zbudowane jest z elementów graficznych nazywanych komponentami. Komponentami są np. przyciski, pola tekstowe, paski, etc… Klasą bazową dla wszystkich typów komponentów graficznych jest Component -> patrz hierarchia dziedziczenia Komponenty znajdują się w kontenerach. Kontenery zarządzają rozkładem komponentów, w których się znajdują. Kontenery są również komponentami i tym samym mogą być umieszczane w innych kontenerach. Kontenery są instancją klasy Container lub jej podklas Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Odświeżanie komponentów graficznych n Powodowane przez system Komponent graficzny powinien zostać narysowany po raz

Odświeżanie komponentów graficznych n Powodowane przez system Komponent graficzny powinien zostać narysowany po raz pierwszy ¨ Komponent zmienił rozmiar ¨ Zawartość komponentu została przysłonięta n ¨ n Powodowane przez aplikację ¨ Aplikacja uznaje, że jej stan wewnętrzny wymaga przemalowania komponentu Powodowane przez system ¨ n Z wątku obsługi zdarzeń zostanie wywołana metoda paint() Powodowane przez aplikację Aplikacja woła repaint() ¨ Z wątku obsługi zdarzeń zostanie wywołana metoda update() (scalanie wywołań !) ¨ Standardowa realizacja update() najpierw wypełni tło aktualnym kolorem tła komponentu, następnie wywoła metodę paint() ¨ Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Metoda paint() n n n Programista dostarcza implementację metody, tego co de facto chce

Metoda paint() n n n Programista dostarcza implementację metody, tego co de facto chce narysować Należy przeładować metodę: public void paint(Graphics g) Graphics przedstawia kontekst graficzny, dla którego można ustawić: kolor, czcionkę, współrzędne, region obcinania Kod związany z rysowaniem powinien być umieszczany w tylko w ciele metody paint() lub metodach przez nią wołanych. Przykład metody paint() Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Komponent – wybrane metody (1) n n get. Background/set. Background get. Foreground/set. Foreground

Klasa Komponent – wybrane metody (1) n n get. Background/set. Background get. Foreground/set. Foreground Zmiana domyślnego koloru przedniego planu ¨ Kolor jest dziedziczony przez obiekt Graphics dla komponentu ¨ n get. Font/set. Font Ustawia/zwraca aktualny kolor czcionki ¨ Kolor jest dziedziczony przez obiekt Graphics dla komponentu ¨ n paint ¨ Wołana za każdym razem, kiedy użytkownik wywołuje metodę repaint lub następuje zmiana komponentu (przesunięcie okienka, przesłonięcie, etc …) Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Komponent – wybrane metody (2) n set. Visible ¨ ¨ n n set.

Klasa Komponent – wybrane metody (2) n set. Visible ¨ ¨ n n set. Size/set. Bounds/set. Location get. Size/get. Bounds/get. Location ¨ n wyświetla informacje na temat komponentu. Zawiera użyteczne informacje do debugowania. invalidate/validate ¨ n ustawia fizyczne aspekty komponentu: rozmiar oraz pozycję list ¨ n eksponuje lub ukrywa komponenty szczególnie użyteczne dla ramek i okienek dialogowych wskazuje menadżerowi rozkładu, żeby przywrócić poprzedni get. Parent ¨ zwraca okno, w którym jest zamknięty lub null Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Lightweight components n n Lekkie komponenty dziedziczą bezpośrednio z klasy Component, nie z natywnych

Lightweight components n n Lekkie komponenty dziedziczą bezpośrednio z klasy Component, nie z natywnych dostarczanych przez system (tzw. peer). Implementują bezpośrednio look’n’feel, rzadziej delegując go do systemu. Lekkie komponenty efektywniej gospodarują zasobami. Mogą być przeźroczyste i nie muszą być prostokątami. Przykładami zbioru lekkich komponentów jest Swing. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Canvas n n n Jest to miejsce, w którym można rysować Płótno nie

Klasa Canvas n n n Jest to miejsce, w którym można rysować Płótno nie ma żadnego menadżera rozkładu, nie może zawierać innych komponentów Dziedziczy się z Canvas i przeładowuje funkcję paint() w celu tworzenia własnego komponentu. Np. do tworzenia obrazkowego przycisku n Wymiarowanie Płótna: ¨ n Dodawania Płótna do aktualnego okna: ¨ n add(plotno) lub dodawanie do okna z Layout. Manager ¨ n set. Size(wysokosc, szerokosc) add(canvas, Border. Layout. Region_Name); Malowanie zawartości. Przeładowanie metody Pain ¨ public void paint(Graphics g) { set. Background(Color. LIGHT_GRAY); //odrysowanie prostokąta g. draw. Rect(0, 0, 99, 49); //odrysowanie ciągu znaków g. draw. String(„Płótno", 20); } Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Panel n Główne przyczyny ¨ ¨ n W celu grupowania komponentów Komponenty użytkownika,

Klasa Panel n Główne przyczyny ¨ ¨ n W celu grupowania komponentów Komponenty użytkownika, które wymagają zagnieżdżenia – A custom component that requires embedded components Domyślnym menadżerem rozkładu jest Flow. Layout Ogranicza komponenty do ich preferowanych rozmiarów (minimalnych) ¨ Komponenty zostają w nim umieszczone od lewej do prawej ¨ n Tworzenie i korzystanie z panelu: ¨ ¨ Tworzenie panelu: Panel panel = new Panel(); Dodawanie komponentów do Panelu: panel. add(some. Component); … Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Panel (2) n Dodanie Panelu do Kontenera: Ażeby dodać panel do zewnętrznego kontenera:

Klasa Panel (2) n Dodanie Panelu do Kontenera: Ażeby dodać panel do zewnętrznego kontenera: container. add(panel); ¨ Ażeby dodać panel do istniejącego kontenera: add(panel); ¨ Dodawanie panelu do kontenera z rozkładem Border. Layout: container. add(panel, region); ¨ n W klasie Panel brakuje eksplicite funkcji wymiarującej rozmiar Panelu. Rozmiar Panelu determinują komponenty. Panel, który nie przechowuje komponentów ma rozmiar 0. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Container n n n Przodek dla wszystkich rodzajów okien z wyjątkiem Canvas Dziedziczy

Klasa Container n n n Przodek dla wszystkich rodzajów okien z wyjątkiem Canvas Dziedziczy wszystkie metody komponentu Użyteczne metody dla Container ¨ add n n ¨ remove n ¨ Usuwa komponent z okna (kontenera) get. Components n n ¨ Dodanie komponentu do kontenera. Jeśli użyty jest Border. Layout, można określić, w którym miejscu umieścić komponent Zwraca tablicę komponentów w danym oknie Używany przez menadżera rozkładów set. Layout n Zmienia menadżera rozkładu skojarzone z danym oknem Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Frame n Główny cel Aplikacje tzw. stand-alone z własnym paskiem menu i paskiem

Klasa Frame n Główny cel Aplikacje tzw. stand-alone z własnym paskiem menu i paskiem tytułu, obramowaniem, kursorem oraz ikoną ¨ Może zawierać inne komponenty GUI ¨ n n n Domyślny Layout. Manager: Border. Layout Przełączenie Manager’a: set. Layout(new Flow. Layout()); Tworzenie i używanie dwóch rodzajów okien: ¨ ¨ n Ze stałym rozmiarem Dopasowujących się do tego co zawierają (metoda pack()) Uwaga! Dziwne zachowanie ramki, w przypadku, gdy się do niej doda komponent, po wywołaniu metody visible Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Zamykana ramka import java. awt. *; import java. awt. event. *; public class Closeable.

Zamykana ramka import java. awt. *; import java. awt. event. *; public class Closeable. Frame extends Frame { public Closeable. Frame(String title) { super(title); enable. Events(AWTEvent. WINDOW_EVENT_MASK); } public void process. Window. Event(Window. Event event) { super. process. Window. Event(event); // Handle listeners if (event. get. ID() == Window. Event. WINDOW_CLOSING) { System. exit(0); } } } Uwaga! W przypadku apletu zamiast funkcji System. exit należy użyć dispose() Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Klasa Dialog n Cele użycia Uproszona ramka. Brak możliwości określenia kursora, ikony, paska menu,

Klasa Dialog n Cele użycia Uproszona ramka. Brak możliwości określenia kursora, ikony, paska menu, etc… ¨ Okienko Dialog zamraża interakcję z innymi komponentami AWT do momentu jego zamknięcia ¨ n n Standardowy Layout. Manager: Border. Layout Tworzenie i używanie: ¨ Podobnie do ramki, jednakże konstruktor bierze dwa dodatkowe argumenty: ramkę z której jest wołany oraz wartość logiczną określającą czy jest modalny czy nie. n n Dialog dialog = new Dialog(parent. Frame, title. String, false); Dialog modal. Dialog = new Dialog(parent. Frame, title. String, true); Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

java. awt oraz hierarchia dziedziczenia Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej ©

java. awt oraz hierarchia dziedziczenia Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Budowa interfejsu graficznego n n Każdy interfejs można zaprezentować w postaci drzewa, którego korzeniem

Budowa interfejsu graficznego n n Każdy interfejs można zaprezentować w postaci drzewa, którego korzeniem jest Container, a liśćmi są komponenty (przyciski, pola tekstowe, etc…) Przykład -> następny slajd n Typy kontenerów: Window – najwyższa warstwa w GUI (okno). Window nie jest podłączany do żadnego innego kontenera. Instancja obiektu Window nie ma krawędzi, ani tytułu. ¨ Frame – najwyższa warstwa w GUI (okno), która posiada tytuł oraz krawędź. Instancja Frame może posiadać pasek menu (menubar) ¨ Dialog – najwyższa warstwa w GUI z krawędzią i tytułem. Instancja Dialog nie może istnieć bez skojarzenia z konkretną instancją Frame. ¨ Panel – generyczna postać kontenera, który może przechowywać komponenty. Instancja Panel oferuje kontener, do którego mogą być dodawane komponenty. ¨ Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Kontrolki GUI - AWT n n n Automatycznie rysowane, nie potrzeba przeładowywać metody paint.

Kontrolki GUI - AWT n n n Automatycznie rysowane, nie potrzeba przeładowywać metody paint. Pozycjonowane są przez menadżera rozkładów. Używają natywnych okienek systemowych tzw. widgets. Adoptują look ‘n’ feel systemu, na którym są uruchamiane. Typowo używane zdarzenia wysokopoziomowe: ¨ n Przykład: dla przycisków nie potrzeba monitorować kliknięć myszki, dodatkowo system operacyjny wyzwala przycisk w momencie uderzenia „ENTER” na klawiaturze, kiedy dany przycisk jest w fokusie. Szczegóły obsługi zdarzeń na następnym wykładzie. Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007

Reprezentacja GUI w postaci drzewa komponentów Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej

Reprezentacja GUI w postaci drzewa komponentów Wydział Matematyki i Informatyki UŁ, Katedra Analizy Nieliniowej © 2007