~~NOCACHE~~ ~~REVEAL theme=simple&disableLayout=0&transition=none&controls=1&show_progress_bar=1&build_all_lists=0&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1024x768~~ ===== Zajęcia 6. - Graficzne interfejsy użytkownika - AWT ===== ==== AWT - Abstract Window Toolkit ==== AWT to podstawowa, choć przestarzała, biblioteka do budowy interfejsów graficznych. Jest zależna od systemu operacyjnego - kontrolki mogą wyglądać inaczej na różnych platformach. AWT jest częścią frameworka JFC (Java Foundation Classes). Użycie kontrolek natywnych bywało jednym z powodów, dla których Java odbierana była jako obciążająca zasoby systemowe. Dokumentacja: [[https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/java/awt/package-summary.html|java.awt (Java SE 17 & JDK 17)]] {{zajecia:java_2026_1:97_1.jpg}} **AWT - hierarchia elementów** ==== java.awt.Component ==== ''Component'' jest abstrakcyjną superklasą dla elementów AWT, które nie posiadają menu. Komponenty mogą być lekkie (light-weight) lub ciężkie (heavy-weight). Komponenty lekkie nie są związane z natywnym oknem i nie wykorzystują bezpośrednio zasobów systemu operacyjnego; komponenty ciężkie korzystają z natywnych zasobów (typowe komponenty AWT). ==== Klasy dziedziczące po Component ==== * **Button** - przycisk * **Canvas** - płótno do rysowania lub budowy własnych komponentów * **Checkbox** - kontrolka dwustanowa (on/off) * **Choice** - rozwijane menu (pop-up) * **Label** - etykieta tekstowa * **List** - lista z możliwością wyboru jednej lub wielu pozycji * **Scrollbar** - suwak poziomy lub pionowy * **TextComponent** - superklasa komponentów edytowalnych tekstowo ==== Container ==== ''Container'' to obiekt mogący przechowywać komponenty AWT. Dodane obiekty traktowane są jak elementy listy; można dodawać je na określone pozycje lub domyślnie na koniec. ''Container'' jest superklasą dla ''Panel'', ''ScrollPane'', ''Window''. ==== Panel ==== Panel to prosty kontener dostarczający przestrzeń do umieszczania innych komponentów. Nie posiada obramowań ani pasków menu. ==== ScrollPane ==== ''ScrollPane'' to kontener oferujący automatyczne przewijanie w poziomie i pionie dla elementów potomnych. Suwaki mogą pojawiać się wg potrzeby lub być zawsze widoczne. Domyślny rozmiar to 100×100 px i należy go dostosować w kodzie. ==== Window ==== ''Window'' to okno bez obramowań i menu; wymaga zdefiniowania właściciela przy tworzeniu. Okna można umieszczać na ekranach fizycznych lub wirtualnych, określając współrzędne. ''Window'' jest superklasą dla ''Dialog'' i ''Frame''. ==== Dialog ==== ''Dialog'' to okno z obramowaniem i paskiem tytułowym, używane do komunikacji z użytkownikiem. Może mieć właściciela i działać modalnie (blokuje okna rodzica) lub niemodalnie. ==== FileDialog ==== Specjalny typ dialogu do wybierania plików przez użytkownika; również może być modalny lub niemodalny. ==== Frame ==== ''Frame'' to okno z tytułem i obramowaniem, wyposażone w przyciski minimalizacji/maksymalizacji i opcjonalne menu - różni się od ''Dialog'' przede wszystkim tymi elementami. ==== Reakcja na zdarzenia - zdarzenia i nasłuchiwacze ==== Java udostępnia mechanizm zdarzeń w postaci interfejsów w pakiecie ''java.awt.event''. Zdarzenia są reprezentowane przez klasy, a obsługa przez implementację odpowiednich listenerów. Klasy zdarzeń i odpowiadające im interfejsy nasłuchiwaczy: ''ActionEvent'' - ActionListener ''MouseEvent'' - MouseListener ''MouseMotionListener'' ''MouseWheelEvent'' - MouseWheelListener ''KeyEvent'' - KeyListener ''ItemEvent'' - ItemListener ''TextEvent'' - TextListener ''AdjustmentEvent'' - AdjustmentListener ''WindowEvent'' - WindowListener ''ComponentEvent'' - ComponentListener ''ContainerEvent'' - ContainerListener ''FocusEvent'' - FocusListener ==== Obsługa zdarzeń ==== - Zarejestrować komponent z odpowiednim Listenerem (szczegóły w dokumentacji komponentu). - Zaimplementować obsługę zdarzenia trzema sposobami: * wewnątrz klasy implementującej interfejs obsługi, * poprzez zewnętrzną klasę implementującą interfejs, * poprzez klasę anonimową. ==== Dostępne kontrolki (przykłady) ==== ''Button'', ''Canvas'', ''Label'', ''Scrollbar'', ''TextField'', ''MenuItem'', ''TextArea'', ''Menu'', ''Checkbox'', ''PopupMenu'', ''CheckboxGroup'', ''Panel'', ''Choice'', ''Dialog'', ''List''. **UWAGA! Wygląd kontrolek zależny jest od systemu!**