Zakład Teoretycznych Podstaw Informatyki Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie



Podobne dokumenty
Tworzenie elementów graficznych

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Podstawy Swing. Tomasz Borzyszkowski

Programowanie zdarzeniowe

Obsługa zdarzeń. Wykład 4

Rysowanie prostych obiektów graficznych przy użyciu biblioteki AWT (Abstract Window Toolkit)

Programowanie graficznych interfejsów użytkownika

Podstawy Języka Java

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Dodanie nowej formy do projektu polega na:

Programowanie zdarzeniowe

LABORATORIUM 7 Cel: 1_1

Programowanie obiektowe

Grafika i komunikacja człowiek komputer Laboratorium. Część 3: Tekst, czcionki, kolory

Informatyka I. Interfejs GUI wysokiego poziomu. Biblioteka Swing. Programowanie zdarzeniowe. Politechnika Warszawska Wydział Transportu 2018

Graphic User Interfaces pakiet Swing

Java SE Laboratorium nr 5. Temat: Obsługa zdarzeń

Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science

Java biblioteka Swing

Programowanie Obiektowe GUI

Grafika i komunikacja człowiek komputer Laboratorium. Część 1: Wstęp do grafiki

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

GUI - projektowanie interfejsów cz. II

Architektura interfejsu użytkownika

Podręcznik użytkownika programu. Ceremonia 3.1

Edytor tekstu MS Word podstawy

Język Java. Rysowanie GUI Określanie wyglądu komponentów

Podstawowe informacje o apletach

Programowanie zdarzeniowe

Edytor tekstu OpenOffice Writer Podstawy

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu

Wykład 12: Obsługa Zdarzeń

Język Java część 2 (przykładowa aplikacja)

Programowanie komputerów Wykład 6: Aplety Java

JAVA W SUPER EXPRESOWEJ PIGUŁCE

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Programowanie aplikacji na urządzenia mobilne

Jak dodać własny szablon ramki w programie dibudka i dilustro

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Programowanie obiektowe

Kontenery i komponenty graficzne

1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a Ustawienia wprowadzające. Auto CAD Aby uruchomić AutoCada 14 kliknij ikonę

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Tworzenie i edycja dokumentów w aplikacji Word.

Ćw. I Projektowanie opakowań transportowych cz. 1 Ćwiczenia z Corel DRAW

setdefaultcloseoperation(jframe.exit_on_close);//obsługa zamykania aplikacji setvisible(true); } //wyświetlenie okna

Arkusz kalkulacyjny EXCEL

Instrukcja obsługi funkcji specjalnych szablonu C01 v.1.0

Laboratorium z informatyki sem. III/ćw. 2 Wydział Transportu PW /19 MATERIAŁY POMOCNICZE DO ĆWICZENIA 2

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Programowanie obiektowe

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1

Ćwiczenia 9 - Swing - część 1

I. Spis treści I. Spis treści... 2 II. Kreator szablonów Tworzenie szablonu Menu... 4 a. Opis ikon Dodanie nowego elementu...

Delphi podstawy programowania. Środowisko Delphi

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej.

Informatyka i Ekonometria Programowanie komputerów Ćwiczenia Tworzenie aplikacji wykorzystaniem graficznego interfejsu użytkownika - Swing.

Java - interfejs graficzny

Obsługa mapy przy użyciu narzędzi nawigacji

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

PLAN WYNIKOWY KLASA 1

POMOC / INSTRUKCJA OBSŁUGI

Wymagania edukacyjne - Informatyka w klasie I

Tworzenie prezentacji w MS PowerPoint

1. Przypisy, indeks i spisy.

Microsoft Visual C++

Expo Composer Garncarska Szczecin tel.: info@doittechnology.pl. Dokumentacja użytkownika

Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.

Visual Studio instalacja

programu Neofon instrukcja obsługi Spis treści

Edytor tekstu OpenOffice Writer Podstawy

Szybkie tworzenie grafiki w GcIde

Zaznaczanie komórek. Zaznaczenie pojedynczej komórki polega na kliknięciu na niej LPM

CorelDRAW. 1. Rysunek rastrowy a wektorowy. 2. Opis okna programu

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

WINDOWS XP PRO WINDOWS XP PRO

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Interfejsy i klasy wewnętrzne

Kurs WWW. Paweł Rajba.

Czcionki bezszeryfowe

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Dlaczego stosujemy edytory tekstu?

PROJEKTOWANIE ABSTRAKCYJNEJ KLASY FIGURA PRZECHOWUJĄCEJ WSPÓLNE CECHY OBIEKTÓW GRAFICZNYCH

System Informatyczny CELAB. Terminy, alarmy

Wykład A1. AutoCAD Dr inż. Jarosław Bydłosz

Laboratorium z Grafiki InŜynierskiej CAD. Rozpoczęcie pracy z AutoCAD-em. Uruchomienie programu

Multimedia JAVA. Historia

Rozdział II. Praca z systemem operacyjnym

ECDL/ICDL Przetwarzanie tekstów Moduł B3 Sylabus - wersja 5.0

Wymiarowanie, kreskowanie, teksty

1.Instalacja. Przechodzimy przez kolejne okna instalatora klikacjąć Dalej. wolek.zallegro.pl

CorelDRAW. wprowadzenie

Obszar pierwszy to pasek narzędzi (rys. 1) zawierający skróty do najczęściej uŝywanych funkcji. Rys. 1 Pasek Narzędzi

Transkrypt:

1 / 43 Zakład Teoretycznych Podstaw Informatyki Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie Materiały pomocnicze przygotowane na podstawie ksiażki Cay S. Horstmann, Gary Cornell Java TM. Podstawy. Wydanie VIII Semestr zimowy 2013/2014

2 / 43 Wersja Javy 1.0 zawierała bibliotekę klas służacych do programowania graficznych interfejsów (GUI). ta została nazwana Abstract Windowing Toolkit (AWT) W wersji Javy 1.2 wprowadzono bibliotekę, która jest nadbudowana nad biblioteka AWT. Powody dla których warto używać biblioteki sa następujace: zawiera bogaty i poręczny zbiór elementów. Jest ona w niewielkim tylko stopniu zależna od konkretnej platformy sprzętowej, a w zwiazku z tym mniej podatna na błędy zwiazane z konkretna platforma sprzętowa. Pozwala tworzyć interfejsy graficzne niezależne od konkretnej platformy sprzętowej.

Tworzenie ramek 3 / 43 Ramka to okno najwyższego, tzn. okno, które nie jest zawarte w żadnym innym oknie. AWT zawiera klasę Frame umożliwiajac a tworzenie ramek, zaś biblioteka zawiera klasę JFrame, która dziedziczy po klasie Frame. Większość klas z biblioteki ma nazwy zaczynajace się od litery J, np. JButton, JFrame, JMenu, itd. Klasy Button, Frame, Menu, itd. sa komponentami biblioteki AWT. W przypadku ominięcia litery J program może się kompilować i wykonywać, ale może wykazywać niekonsekwencje w wygladzie i w zachowaniu. Example Program 001: SimpleFrameTest.java

Pozycjonowanie ramek 4 / 43 Najważniejsze metody używane do ustalania rozmiaru i położenia ramek: metoda dispose, która zamyka okno oraz zwalnia wszystkie zasoby systemowe użyte do jego utworzenia metoda seticonimage, której argumentem jest obiekt klasy Image traktowany jako ikona w przypadku zminimalizowania okna metoda settitle zmieniajaca tekst na pasku tytułowym metoda setresizable, której argumentem jest wartość typu boolean określajaca czy użytkownik będzie mógł zmieniać rozmiar ramki Example Program 002: CenteredFrameTest.java

5 / 43 Hierarchia dziedziczenia dla klas JFrame oraz JPanel

6 / 43 Wybrane metody klasy java.awt.component public boolean isvisible() Sprawdza czy komponent this powinien być widoczny o ile jego rodzic jest widoczny. Poczatkowo wszystkie komponenty, za wyjatkiem komponentów najwyższego takich jak JFrame, sa widoczne. public void setvisible(boolean b) Pokazuje lub ukrywa komponent this. public boolean isshowing() Sprawdza czy komponent this pokazuje się na ekranie. Aby tak było musi on być widoczny jak również jego rodzic musi być widoczny i musi pokazywać się na ekranie.

Wybrane metody klasy java.awt.component 7 / 43 public boolean isenabled() Sprawdza czy komponent this jest umożliwiony, tzn. czy może reagować na działania (np. naciśnięcia klawiszy) oraz czy może generować zdarzenia. Poczatkowo wszystkie komponenty sa umożliwione. public void setenabled(boolean b) Umożliwia lub uniemożliwia komponent this. Point getlocation() Zwraca położenie lewego górnego rogu komponentu this względem położenia lewego górnego rogu jego rodzica. public Point getlocationonscreen() Zwraca bezwględne położenie lewego górnego rogu komponentu this.

8 / 43 Wybrane metody klasy java.awt.component public void setbounds( int x, int y, int width, int height) Zmienia położenie oraz rozmiar komponentu this. public void setlocation(int x, int y) public void setlocation(point p) Zmienia położenie komponentu this. public Dimension getsize() Pobiera rozmiar komponentu this. public void setsize(int width, int height) public void setsize(dimension d) Zmienia rozmiar komponentu this.

9 / 43 Wybrane metody klasy java.awt.window public void tofront() Jeżeli okno this jest widoczne, to przenosi je na szczyt stosu wszystkich okien. public void toback() Jeżeli okno this jest widoczne, to przenosi je na dno stosu wszystkich okien.

10 / 43 Wybrane metody klasy java.awt.frame public void setresizable(boolean b) Umożliwia lub uniemożliwia zmianę rozmiaru ramki przez. public void settitle(string title) Ustawia napis title jako tytuł ramki wyświetlany na pasku tytułowym.

Wybrane metody klasy java.awt.frame 11 / 43 public void seticonimage(image image) Ustawia obraz image jako ikonę ramki this. public void setundecorated( boolean undecorated) Ustawia lub usuwa dekorację ramki this public boolean isundecorated() Zwraca true jeżeli ramka this ma usunięta dekorację. public int getextendedstate() Zwraca wartość całkowita określajac a stan ramki. public void setextendedstate(int state) Ustawia stan ramki na wartość state. Możliwe stany to: Frame.NORMAL, Frame.ICONIFIED, Frame.MAXIMIZED_HORIZ, Frame.MAXIMIZED_VERT oraz Frame.MAXIMIZED_BOTH

Wybrane metody klasy java.awt.toolkit 12 / 43 public static Toolkit getdefaulttoolkit() Statyczna metoda pobierajaca domyślny zestaw narzędziowy. public abstract Dimension getscreensize() Statyczna metoda pobierajaca rozmiar ekranu. public abstract Image getimage( String filename) Metoda pobierajaca z pliku filename obrazek w formacie GIF, JPEG lub PNG. public abstract void beep() Emituje sygnał dźwiękowy z głośniczka systemowego. Example Program 003: TalkingClockTest.java

13 / 43 Wyświetlanie komunikatów w panelu Chociaż komunikaty można wyświetlać bezpośrednio w ramce, nie jest to dobra programistyczna praktyka. Ramki sa zaprojektowane jako kontenery, do których można dodawać elementy graficznego, takie jak: przyciski, suwaki, paski menu, listy wyboru i inne. Aby wyświetlić komunikat należy do ramki dodać panel i w nim wyświetlić komunikat. Panele to obiekty klasy JPanel. Posiadaja one dwie użyteczne własności: Posiadaja powierzchnię, na której można rysować. Sa kontenerami, a więc moga również zawierać inne elementy graficznego.

Wewnętrzna struktura obiektu typu JFrame 14 / 43 Spośród uwidocznionych warstw tylko warstwa zawartości (content pane) ma istotne znaczenie dla programistów wykorzystujacych bibliotekę.

15 / 43 Rysowanie na panelu Aby móc rysować na panelu należy: utworzyć klasę dziedziczac a po klasie JPanel oraz przedefiniować w tej klasie metodę paintcomponent. Metoda paintcomponent jest zdefiniowana w klasie JComponent. Jej jedyny argument jest referencja do obiektu klasy Graphics. Obiekt ten pamięta ustawienia używane w rysowaniu tekstu i grafiki, takie jak rodzaj czcionki, kolor tekstu i inne. Nie należy nigdy wywoływać metody paintcomponent, ponieważ jest ona wywoływana automatycznie w przypadku zaistnienia potrzeby przerysowania części wizualnych komponentów. Aby wymusić przerysowanie komponentu należy wywołać bezargumentowa metodę repaint.

Wybrane metody zwiazane z rysowaniem 16 / 43 public Container getcontentpane() zwraca referencję do obiektu contentpane klasy Container zwiazanego z ramka this. public void add(component c) dodaje komponent do obiektu contentpane ramki this. Do wersji 1.4 włacznie metoda ta wyrzucała wyjatek. public void repaint() public void repaint( int x, int y, int width, int height) przerysowuje komponent (część komponentu) tak szybko jak to możliwe. Example Program 004: NotHelloWorld.java

Praca z kształtami 2D 17 / 43 Poczawszy od wersji 1.0 Javy klasa Graphics posiadała metody do rysowania linii, prostokatów oraz elips. Jednakże operacje te miały bardzo ograniczone możliwości. W Javie 1.2 wprowadzono bibliotekę Java 2D, w której zaimplementowano potężny zbiór operacji graficznych. Aby narysować kształt z użyciem biblioteki Java 2D należy utworzyć obiekt klasy Graphics2D, która jest podklasa klasy Graphics. Java 2D organizuje kształty geometryczne w stylu obiektowym. W szczególności istnieja klasy reprezentujace linie, prostokaty i elipsy: Line2D, Rectangle2D, Ellipse2D. Klasy te implementuja interfejs Shape.

Klasa Rectangle2D 18 / 43 Klasa Rectangle2D jest klasa abstrakcyjna z dwoma konkretnymi podklasami, które sa statycznymi wewnętrznymi klasami klasy Rectangle2D: Rectangle2D.Float oraz Rectangle2D.Double. Aby utworzyć obiekt klasy Rectangle2D.Float należy w konstruktorze podać argumenty typu float: Rectangle2D f = new Rectangle2D.Float (10.0F, 25.0F, 22.5F, 20.0F); Aby utworzyć obiekt klasy Rectangle2D.Double należy w konstruktorze podać argumenty typu double: Rectangle2D d = new Rectangle2D.Double (10.0, 25.0, 22.5, 20.0); Argumenty konstruktora oznaczaja współrzędne lewego, górnego rogu, szerokość oraz wysokość prostokata.

19 / 43 Uwagi dodatkowe o bibliotece Java 2D Jeżeli nie tworzymy w programie bardzo dużej liczby obiektów, to można ograniczyć się do korzystania z klasy Rectangle2D.Double. Inne klasy implementujace interfejs Shape to przykładowo: Line2D, Ellipse2D, Arc2D oraz ich statyczne klasy wewnętrzne Float i Double. Dodatkowa, bardzo użyteczna klasa, jest klasa Point2D oraz jej statyczne klasy wewnętrzne Float i Double. Klasy Rectangle2D oraz Ellipse2D dziedzicza po wspólnej klasie RectangularShape. Chociaż elipsy nie sa prostokatami to posiadaja ograniczajacy prostokat.

20 / 43 Uwagi dodatkowe o bibliotece Java 2D Klasa RectangularShape definiuje ponad 20 metod wspólnych dla kształtów, w tym tak użyteczne jak: getwidth, getheight, getcenterx oraz getcentery. Spadkowe klasy z wersji Javy 1.0, takie jak Rectangle oraz Point zostały wpasowane w hierarchię klas implementujacych interfejs Shape.

Uwagi dodatkowe o bibliotece Java 2D 21 / 43 Aby utworzyć obiekt klasy Rectangle2D lub Ellipse2D należy podać współrzędne lewego górnego rogu oraz szerokość i wysokość. W przypadku elipsy argumenty te odnosza się do ograniczajacego ja prostokata. Jeżeli znamy położenie końców jednej z przekatnych prostokata ale nie wiemy czy sa to lewy górny oraz prawy dolny rogi, to należy najpierw utworzyć pusty prostokat a następnie użyć metody setframefromdiagonal. Aby utworzyć odcinek należy podać jego końce, albo jako obiekty typu Point2D albo jako współrzędne poczatku i końca. Example Program 005: DrawTest.java

22 / 43 Używanie kolorów Metoda setpaint z klasy Graphics2D pozwala wybrać kolor używany następnie w operacjach rysowania. Klasa java.awt.color definiuje 13 kolorów: BLACK GREEN RED BLUE LIGHT_GRAY WHITE CYAN MAGENTA YELLOW DARK_GRAY ORANGE GRAY PINK Aby zdefiniować własny kolor należy utworzyć obiekt klasy Color podajac składowe tego koloru: Color(int redness, int greenness, int blueness) // argumenty z zakresu 0-255 Aby ustawić kolor tła należy użyć metody setbackground z klasy Component.

23 / 43 Kolory systemowe Klasa SystemColor definiuje kolory systemowe dla różnych elementów. Przykładowo, aby ustawić systemowy kolor tła panelu należy użyć koloru SystemColor.window: MyPanel p = new MyPanel(); p.setbackground(systemcolor.window); Używanie kolorów z klasy SystemColor zapewnia zgodność używanych kolorów z tymi używanymi na pulpicie. Example Program 006: FillTest.java

24 / 43 używanie czcionek Czcionki w Javie dziela się na dwa rodzaje: czcionki logiczne oraz czcionki fizyczne. Czcionki fizyczne sa zależne od systemu, na którym działa maszyna wirtualna, natomiast czcionki logiczne to rodziny czcionek, które musza być obsługiwane przez każde środowisko uruchomieniowe Javy. W środowisku Java 2 jest dostępnych jedynie pięć czcionek logicznych: Serif, SansSerif, Monospaced, Dialog, DialogInput. Nie sa to czcionki wbudowane. Dla danej czcionki logicznej dobierana jest ta czcionka systemowa, która najlepiej pasuje do jednej z wymienionych rodzin. Czcionka domyślna jest czcionka Dialog.

25 / 43 używanie czcionek Aby użyć określonej czcionki należy utworzyć obiekt klasy Font z pakietu java.awt. Konstruktor klasy Font przyjmuje trzy argumenty: pierwszy z nich określa nazwę rodziny czcionek, drugi styl czcionki, natomiast trzeci jej wielkość. Styl czcionki ustalamy, posługujac się stałymi z klasy Font. Do dyspozycji mamy trzy różne wartości: Font.BOLD czcionka pogrubiona, Font.ITALIC czcionka pochylona, Font.PLAIN czcionka zwyczajna. Example Program 007: ListFonts.java Program 008: FontTest.java

wyświetlanie obrazów 26 / 43 Wczytywanie obrazu z dysku lokalnego String filename =...; Image image = ImageIO.read(new File(filename)); Wczytywanie obrazu z adresu URL String urlname =...; Image iamge = ImageIO.read(new URL(urlname)); Wyświetlanie obrazu przy użyciu metod klasy Graphics public abstract boolean drawimage( Image img, int x, int y, ImageObserver o) public abstract void copyarea(int x, int y, int width, int height, int dx, int dy) Example Program 009: ImageTest.java

obsługa zdarzeń 27 / 43 Zdarzenia, takie jak naciśnięcie klawisza lub przycisku myszy, przytrafiaja się obiektom. Źródło zdarzenia to obiekt, któremu przytrafiło się zdarzenie. Słuchacz to obiekt klasy implementujacej interfejs nasłuchu (ActionListener). Źródło zdarzenia może zarejestrować słuchacza i wysyłać mu obiekty zdarzeń. Źródło zdarzenia rozsyła obiekty zdarzeń do wszystkich zarejestrowanych przez siebie słuchaczy. Obiekty słuchaczy używaja informacji zawartej w obiektach zdarzeń do określenia reakcji na zdarzenie. Example Program 010: ButtonTest.java

28 / 43 Powiadamianie o zdarzeniu

Uwagi 29 / 43 Interfejs ActionListener użyty w programie ButtonTest.java nie jest ograniczony do kliknięć w przyciski. Jest on używany w wielu innych sytuacjach: Kiedy poprzez podwójne kliknięcie wybierana jest pozycja z listy wyboru. Kiedy wybierana jest pozycja z menu. Kiedy naciśnięty został klawisz ENTER w polu tekstowym. Kiedy upłynał określony kwant czasu dla komponentu Timer. W każdym z tych przypadków metoda actionperformed (jedyna metoda ActionListener) otrzymuje obiekt klasy ActionEvent jako argument. Obiekt ten zawiera informacje o zaistniałym zdarzeniu.

30 / 43 Wykorzystanie klas anonimowych W programie ButtonTest.java tworzone sa trzy przyciski. Dla każdego przycisku wykonuje się następujace czynności: Utworzenie przycisku z etykieta. Dodanie przycisku do panelu. Utworzenie słuchacza z odpowiednim kolorem. Dodanie tego słuchacza do przycisku. Dlatego można utworzyć pomocnicza metodę makebutton obejmujac a te czynności, a w konstruktorze wywołać ja dla każdego przycisku. Example Program 011: BetterButtonTest.java

Wykorzystanie wewnętrznych klas anonimowych 31 / 43 Dodatkowo, ze względu na to, że klasa ColorAction jest potrzebna tylko raz (w metodzie makebutton), można zrobić z tej klasy klasę anonimowa. Upraszcza to w pewnym stopniu kod metody słuchacza. Zauważmy, że metoda actionperformed odwołuje się do argumentu metody makebutton o nazwie colorbackground. Dlatego, podobnie jak wszystkie lokalne zmienne wykorzystywane w klasie wewnętrznej, argument metody makebutton musi być zadeklarowany jako final. Example Program 012: TheBestButtonTest.java Program 013: PlafTest.java

32 / 43 Hierarchia zdarzeń w bibliotece AWT

33 / 43 Hierarchia zdarzeń w bibliotece AWT Powszechnie używane typy zdarzeń z biblioteki AWT: ActionEvent AdjustmentEvent FocusEvent ItemEvent KeyEvent MouseEvent MouseWheelEvent WindowEvent Interfejsy nasłuchu tych zdarzeń to: ActionListener FocusListener KeyListener MouseMotionListener WindowListener WindowStateListener AdjustmentListener ItemListener MouseListener MouseWheelListener WindowFocusListener

34 / 43 Hierarchia zdarzeń w bibliotece AWT Dla tych z powyższych interfejsów, które deklaruja więcej niż jedna metodę istnieja klasy adaptacyjne implementujace puste metody dla tych interfejsów. Do najczęściej używanych klas adaptacyjnych należa: FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter Dla interfejsów nasłuchu deklarujacych jedna metodę nie istnieja klasy adaptacyjne implementujace te interfejsy, ponieważ ich istnienie nie dawałoby żadnych korzyści.

Klasy zdarzeń w bibliotece AWT 35 / 43 AWT czyni użyteczne rozróżnienie pomiędzy zdarzeniami semantycznymi a zdarzeniami. Zdarzenia semantyczne to zdarzenia opisujace co robi użytkownik, np. kliknięcie mysza w przycisk. Zdarzenia to zdarzenia, które umożliwiaja takie działania, np. naciśnięcie klawisza myszki, poruszanie myszka, zwolnienie przycisku myszki (o ile zwolnienie to nastapiło w obszarze przycisku). Innym przykładem zdarzenia jest np. naciśnięcie klawisza ENTER, o ile wcześniej dany przycisk został wybrany przy pomocy klawisza TAB a następnie aktywowany przy pomocy klawisza spacji.

Przykłady zdarzeń semantycznych 36 / 43 Najczęściej używane zdarzenia semantyczne to: ActionEvent kliknięcie przycisku, wybór elementu menu, wybór elementu listy, naciśnięcie klawisza ENTER w polu tekstowym AdjustmentEvent przesunięcie suwaka ItemEvent wybór jednego z wielu pór wyboru Pięć klas zdarzeń to: KeyEvent klawisz klawiatury wciśnięty lub zwolniony MouseEvent klawisz myszki został naciśnięty lub zwolniony, myszka została przesunięta z wciśniętym lub zwolnionym klawiszem MouseWheelEvent rolka myszy została obrócona FocusEvent komponent został aktywowany lub zdezaktywowany WindowEvent okno zostało aktywowane, zdezaktywowane, wysłane do paska zadań, przywrócone na ekran lub zamknięte

Podsumowanie delegacyjnego modelu zdarzeń 37 / 43 Źródłami zdarzeń sa elementy, okna oraz menu. System operacyjny powiadamia źródło zdarzenia o interesujacych je zachowaniach. Źródło opisuje naturę danego zdarzenia używajac do tego celu obiektu zdarzenia. Posiada ono również listę słuchaczy obiektów, które należy wywołać, gdy nastapi dane zdarzenie. Następnie źródło zdarzenia wywołuje odpowiednia metodę nasłuchu aby powiadomić o zdarzeniu słuchaczy zainteresowanych danym zdarzeniem. Robi to przekazujac obiekt zdarzenia do metody z klasy słuchacza. Obiekt słuchacza analizuje obiekt zdarzenia w celu uzyskania informacji o zdarzeniu.

Zdarzenia dotyczace klawiatury 38 / 43 Gdy użytkownik wciska klawisz generowane jest zdarzenie KeyEvent z wartościa id równa KEY_PRESSED, a gdy zwalnia klawisz generowane jest zdarzenie KeyEvent z wartościa id równa KEY_RELEASED. Zdarzenia te można przechwytywać przy pomocy metod keypressed oraz keyreleased z dowolnej klasy implementujacej interfejs KeyListener. Trzecia metoda, keytyped, łaczy działanie dwóch powyższych zwraca informację o znaku wygenerowanym przez naciśnięcie danego klawisza. Java czyni rozróżnienie pomiędzy znakami a wirtualnymi kodami klawiszy. Wirtualne kody klawiszy oznaczane sa prefiksem VK, np. VK_A lub V_SHIFT.

39 / 43 Zdarzenia dotyczace klawiatury Załóżmy, że użytkownik w zwykły sposób wpisuje duża literę A, tzn. naciska klawisze SHIFT oraz A jednocześnie. Wygenerowanych zostanie wówczas pięć zdarzeń. Zdarzenia te oraz odpowiadajace im akcje to: został naciśnięty klawisz SHIFT wywołanie metody keypressed dla VK_SHIFT został naciśnięty klawisz A wywołanie metody keypressed dla VK_A zostało wpisane A wywołanie metody keytyped dla A został zwolniony klawisz A wywołanie metody keyreleased dla VK_A został zwolniony klawisz SHIFT wywołanie metody keyreleased dla VK_SHIFT

Zdarzenia dotyczace klawiatury 40 / 43 Załóżmy, że użytkownik w zwykły sposób wpisuje mała literę a, tzn. naciska klawisz A. Wygenerowane zostana wówczas tylko trzy zdarzenia. Zdarzenia te oraz odpowiadajace im akcje to: został naciśnięty klawisz A wywołanie metody keypressed dla VK_A zostało wpisane A wywołanie metody keytyped dla A został zwolniony klawisz A wywołanie metody keyreleased dla VK_A Mnemoniki dla wirtualnych kodów klawiszy zdefiniowane sa w klasie KeyEvent. Example Program 014: ActionTest.java Program 015: Sketch.java

Zdarzenia dotyczace myszki Nie ma potrzeby, aby programista obsługiwał niskpoziomowe zdarzenia zwiazane z myszka gdy jest ona używana np. do wyboru pozycji z listy lub z menu. Zdarzenia te sa obsługiwane przez różne komponenty i przekształcane sa na zdarzenia semantyczne. Jednakże, jeżeli programista chciałby użytkownikowi swojego programu umożliwić rysowanie przy pomocy myszki, to wtedy musi obsługiwać niskpoziomowe zdarzenia zwiazane z myszka. 41 / 43 Example Program 016: MouseTest.java

42 / 43 Wprowadzanie tekstu Pola tekstowe Walidacja danych Pola haseł Obszary tekstowe Etykiety i komponenty etykiet Wybór tekstu Edycja tekstu Dokonywanie wyborów Pola wyboru Przełaczniki Krawędzie Listy kombinowane Suwaki

43 / 43 Menu Tworzenie menu Ikony elementów menu Pola wyboru i przełaczniki jako elementy menu Menu kontekstowe Mnemoniki i akceleratory Właczanie i wyłaczanie elementów menu Paski narzędzi Podpowiedzi Okna dialogowe Okna wyboru Tworzenie okien dialogowych Przesyłanie danych Okno pliku Okno wyboru koloru