Aplety Javy Elementy interfejsu graficznego z pakietu java.awt

advertisement
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
Download