Laboratorium z informatyki sem. II/ćw. 8 Wydział Transportu PW - 2016/17 MATERIAŁY POMOCNICZE DO ĆWICZENIA 8 Aplety Javy Aplet to program Javy osadzony w dokumencie HTML, z reguły posiadający reprezentację graficzną. • Główna klasa apletu musi być klasą publiczną, dziedziczącą od klasy Applet z pakietu java.applet lub od jej klasy potomnej JApplet z pakietu java.swing. Nazwa klasy apletu musi być taka jak nazwa pliku, w którym się znajduje. • Poprzez dziedziczenie, aplet uzyskuje szereg metod zdefiniowanych w klasie nadrzędnej, a w szczególności: o możliwość komunikowania się z przeglądarką, o zdolność do obsługi graficznego interfejsu użytkownika. • Aplet w odróżnieniu od aplikacji nie posiada metody main(). Cykl życia apletu wyznaczają cztery metody zdefiniowane w klasie Applet. Metody te są puste i domyślnie nie robią nic; można je przedefiniowywać według potrzeb w klasach potomnych. Metoda init() jest jednokrotnie wywoływana po załadowaniu strony z apletem. Umieszcza się w niej kod potrzebny do zainicjowania apletu, np. nadający wartości początkowe zmiennym, ustawienia czcionek, kolorów, tła ekranu itp. Metoda start() jest wywoływana zaraz po wykonaniu metody init(), a także przy każdym powrocie na stronę z apletem, gdy staje się ona stroną bieżącą w przeglądarce. Używa się jej do uruchamiania wątków programu, animacji, wysyłania komunikatów do obiektów pomocniczych lub odtwarzania dźwięków towarzyszących działaniu apletu. Metoda stop() jest wywoływana, gdy okno przeglądarki, w której znajduje się aplet, jest minimalizowane do ikony, zasłaniane przez inne okno, lub gdy otwierana jest w nim nowa strona WWW. Zwykle używa się jej do zatrzymania wątków oraz do przeprowadzenia czynności porządkowych. Metoda destroy() jest wywoływana, gdy aplet kończy swoje działanie – tuż przed usunięciem apletu z pamięci. Może posłużyć do zatrzymania dowolnego wątku lub usunięcia obiektów utworzonych przez aplet. Jest ona rzadko używana, ponieważ Java posiada mechanizm automatycznego zwalniania nieużywanych zasobów pamięci. Elementy interfejsu graficznego z pakietu java.awt Pakiet java.awt definiuje szereg klas użytecznych do tworzenia graficznego interfejsu apletu lub aplikacji. W ćwiczeniu wykorzystano następujące klasy z tego pakietu: • Klasa Component Klasa Component jest nadrzędną klasą dla klasy Applet. Udostępnia ona metodę paint(), która służy do wyświetlania grafiki i tekstu na kanwie apletu. Metoda paint()ma sygnaturę: public void paint(Graphics g) Jedynym parametrem metody jest referencja do obiektu klasy Graphics, który stanowi graficzną kanwę obrazu apletu, reprezentującą tzw. graficzny kontekst urządzenia (Graphics Device Context). Np. obiekt klasy Graphics reprezentujący kontekst graficzny strony HTML jest przekazywany przez przeglądarkę metodzie paint(), wywołanej po załadowaniu klasy apletu. Obok metody paint() klasa Component posiada m.in. użyte w ćwiczeniu metody: setSize(int szerokość, int wysokość) zmienia rozmiary komponentu setBackground(Color kolor) nadaje kolor tła komponentu graficznego Układ współrzędnych ekranowych • Początek układu współrzędnych ekranowych (0,0) znajduje się w lewym górnym rogu okna apletu. • Zwiększanie wartości współrzędnych następuje w miarę przesuwania się w prawo i w dół. • Maksymalne wartości współrzędnych można określić dziedziczonymi od klasy Component metodami getWidth(), getHeight() zwracającymi odpowiednio szerokość i wysokość okna apletu. • Klasa Graphics Jest klasą bazową dla wszystkich graficznych kontekstów urządzenia. W ćwiczeniu użyto jej następujących metod: • clearRect(int x, int y, int w, int h) wypełnia kolorem tła prostokąt, którego lewy górny wierzchołek ma współrzędne (x, y); w - szerokość, h wysokość • fillRect(int x, int y, int w, int h) – wypełnia bieżącym kolorem prostokąt, którego lewy górny wierzchołek ma współrzędne (x, y); w - szerokość, h wysokość • drawRect(int x, int y, int w, int) – rysuje bieżącym kolorem prostokąt (łamaną, którą tworzą boki prostokąta); znaczenie parametrów – jak w metodzie fillRect() • drawString(String s, int x , int y) wyświetla tekst s począwszy od punktu (x, y) • fillPolygon(Polygon p) rysuje obiekt klasy Polygon (wielobok) wypełniony bieżącym kolorem • drawPolygon(Polygon p) rysuje obiekt klasy Polygon (łamaną, którą tworzą boki wieloboku) • fillPolygon(int[]x, int[]y, int n) rysuje wielobok wypełniony bieżącym kolorem; n – liczba wierzchołków, x, y - współrzędne wierzchołków wieloboku Materiały do użytku wewnętrznego strona 1 Laboratorium z informatyki sem. II/ćw. 8 • • • Wydział Transportu PW - 2016/17 drawPolygon(int[]x, int[]y, int n) rysuje wielobok (łamaną, którą tworzą boki wieloboku); n – liczba wierzchołków, x, y - współrzędne wierzchołków wieloboku SetFont(Font f) ustala bieżącą czcionkę graficznego kontekstu urządzenia SetColor(Color k) ustala bieżący kolor graficznego kontekstu urządzenia • Klasa Font Czcionkę reprezentuje obiekt klasy Font, tworzony za pomocą konstruktora: Font(krój, styl, rozmiar); gdzie: krój – to łańcuch tekstowy określający krój czcionki np.”Dialog”, ”SanSerif”, "Helvetica" styl - jest jedną ze stałych statycznych typu int z klasy Font: Font.BOLD, Font.ITALIC, Font.PLAIN rozmiar - to liczba całkowita określająca wielkość czcionki w punktach • Klasa FontMetrics Aby dobrze rozplanować położenie tekstu, należy uzyskać charakterystyki pisma kontekstu graficznego. Umożliwia to metoda g.getFontMetrics(), która zwraca metrykę (obiekt klasy FontMetrics ) dla bieżącej czcionki kontekstu graficznego g. W klasie FontMetrics zdefiniowana jest z kolei metoda o sygnaturze int stringWidth(String s), która zwraca szerokość obszaru zajmowanego przez napis s. Złożenie metod g.getFontMetrics().stringWidth(s) zwróci szerokość napisu s wyświetlonego bieżącą czcionką. • Klasa Color Kolor jest obiektem klasy Color, która ma kilka konstruktorów. Instrukcja deklarująca i tworząca określony kolor ma postać: Color nazwa = new Color(r, g, b); Parametry r, g, b są liczbami całkowitymi z zakresu 0..255 i są składowymi reprezentacji RGB (R-red, G-green, Bblue) definiowanego koloru (teoretycznie można otrzymać w ten sposób ponad 16 milionów kolorów). Klasa Color zawiera kilkanaście standardowych wartości kolorów. Są one zadeklarowane jako stałe klasowe, np. public final static Color blue = new Color(0, 0, 255); Zatem można je używać bez tworzenia nowych obiektów klasy Color, np. Color.BLUE, Color.orange itp. Nazwy stałych określających kolory można pisać małymi lub wielkimi literami dzięki dodatkowym deklaracjom, występującym w definicji klasy Color. • Klasa Polygon Ta klasa reprezentuje obiekty geometryczne zwane wielokątami lub wielobokami. W ćwiczeniu wykorzystano jej pola (atrybuty) npoints, xpoints[] i ypoints[] oraz konstruktor, tworzący obiekt klasy Polygon: int npoints – liczba wierzchołków wielokąta int[] xpoints – tablica współrzędnych x wierzchołków wielokąta int[] ypoints – tablica współrzędnych y wierzchołków wielokąta Konstruktor klasy, czyli metoda tworząca nowy obiekt klasy Polygon, ma sygnaturę: public Polygon (int[] xpoints, int[] ypoints, int npoints) Hierarchia klas i zasada dziedziczenia Mechanizm dziedziczenia pozwala na uporządkowanie hierarchii klas. Na samym szczycie hierarchii klas języka Java znajduje się klasa o nazwie Object i wszystkie pozostałe klasy dziedziczą podstawowe zachowania od tej klasy. Klasa dziedzicząca nazywana jest klasą podrzędną (podklasą). Klasa, z której dziedziczą inne, to klasa nadrzędna, zwana też bazową. Każda klasa może mieć tylko jedną klasę nadrzędną. Od niej dziedziczy pełną funkcjonalność, a oprócz tego może zawierać swoje własne metody i atrybuty. Może też zmieniać (przesłaniać, ang. override) metody klasy nadrzędnej. • W nagłówku definicji klasy podrzędnej występuje nazwa klasy nadrzędnej poprzedzona słowem kluczowym extends, np. class Wielobok extends Polygon • Jeśli w konstruktorze danej klasy chcemy wykorzystać treść konstruktora klasy nadrzędnej, należy użyć instrukcji super(); lub super(arg1, arg2,...); (gdzie arg1, arg2 − argumenty konstruktora klasy nadrzędnej); musi to być pierwsza instrukcja w tworzonym konstruktorze. Tożsamość obiektu; słowo kluczowe this • Jeśli podczas tworzenia definicji klasy chcemy odwołać się w metodzie do bieżącego obiektu tej klasy, na rzecz którego metoda będzie wywołana, należy w miejsce nazwy obiektu zastosować słowo kluczowe this. • W treści ćwiczenia, w definicji klasy Wielobok, występuje wywołanie metody g.fillPolygon(this); Wywołaliśmy tu metodę fillPolygon() wewnątrz metody Rysuj() zdefiniowanej w klasie Wielobok, a więc zastosowane słowo kluczowe this oznacza odwołanie do bieżącego obiektu klasy Wielobok. Materiały do użytku wewnętrznego strona 2