Marcin Luckner Warsaw University of Technology Faculty of Mathematics and Information Science mluckner@mini.pw.edu.pl http://www.mini.pw.edu.pl/~lucknerm
Abstract Window Toolkit Przekazuje tworzenie i obsługę do natywnych narzędzi GUI Przenośne, ale na najniższym wspólnym poziomie Rozszerzone przez Swing Swing jest nadbudówką na architekturze AWT mluckner@mini.pw.edu.pl 5/6/2014 2
Swing jest częścią Java Foundation Classes (JFC) Wszystkie komponenty są obsługiwane przez Javę Może być wolniejszy niż AWT Ma bogaty i wygodny zestaw elementów użytkownika Odporny na specyficzne błędy platform Zapewnia stabilną obsługę użytkownika na różnych platformach 3
Zajmiemy się Swingiem, ale Eclipse używa narzędzi SWT Oracle stworzyła alternatywną technologię nazwaną JavaFX 4
Komponenty Swing nazywają się na J JFrame JButton Mogą być pomylone z komponentami AWT: Frame Button Nie powinno się łączyć AWT i Swing Choć powinno to działać z Java 1.6 version 2 i późniejszymi 5
Tworzy ramkę. JFrame frame = new JFrame("FrameDemo"); Pozwala użytkownikowi ją zamknąć frame.setdefaultcloseoperation(jframe.ex IT_ON_CLOSE); Tworzy komponenty umieszczane na ramce. frame.getcontentpane().add(emptylabel) Ustala rozmiar ramki. frame.pack(); Wyświetla ją. frame.setvisible(true); 6
7
Wszystkie komponenty Swing rozpoczynające się na "J" dziedziczą z klasy JComponent Wybrane cechy Podpowiedzi Rysowanie i określanie granic Przełączenie wyglądu i zachowań Wsparcie dla layoutów Wsparcie dla przeciągnij i upuść Podwójne buforowanie Przypisywanie klawiszy 8
JButton Zwykły przycisk JCheck Box Zaznaczenie JRadioButton Przełącznik JToggleButton Łączenie cech przełącznika i zaznaczenia 9
Elementy menu mają podobną strukturę jak przyciski JMenuItem JCheckBoxMenuItem JRadioButtonMenuItem 10
W Javie kontrolujemy jak zdarzenia są przekazywane ze źródeł zdarzeń (przyciski, paski przewijania, ) do nasłuchiwaczy zdarzeń. Każdy obiekt może nasłuchiwać zdarzeń Można przypisać wielu nasłuchiwaczy do tego samego zdarzenia 11
MyListener listener = new MyListener (); JButton button = new JButton("Ok"); button.addactionlistener(liste ner); MyListener listener2 = new MyListener (); button.addactionlistener(liste ner2); class MyListener implements ActionListener { public void actionperformed(actioneven t event) { // reaction to button click goes here } } JButton ActionListener 12
Nie ogranicza się do przycisków Przykłady Wybór z listy podwójnym kliknięciem Wybór z menu Wciśnięcie klawisza nad polem edycji mluckner@mini.pw.edu.pl 5/6/2014 13
EventObject getsource() AWTEvent extends EventObject ActionEvent extends AWTEvent getactioncommand() 14
Window Listeners Mouse Listeners Item Listeners Property Change Listeners I więcej 15
Otwarcie okna Pierwsze pokazanie okna. Zamknięcie okna Usunięcie okna z ekranu. Minimalizowanie okna Zmniejszenie okna do ikony. Przywrócenie okna Przywrócenie wcześniejszego rozmiaru. Nadanie fokusa Przeniesienie aktywności z innego obiektu Aktywowanie okna (frame lub dialog) Okno otrzymało status aktywnego Deaktywowanie okna Okno straciło status aktywnego Maksymalizowanie okna Zwiększenie rozmiaru okna do maksymalnych rozmiarów 16
WindowListener Otwarcie i zamknięcie okna, Aktywacja i deaktywacja okna, Minimalizacja i przywócenie okna WindowFocusListener Okno stało się aktywne Okno przestało być aktywne WindowStateListener minimalizacja, przywrócenie, maksymalizacja, Przywrócenie rozmiaru. 17
MouseListener mousepressed mousereleased mouseentered mouseexited mouseclicked MouseMotionListener mousemoved mousedragged MouseWheelListener mousewheelmoved 18
MouseEvent getclickcount() getbutton() getx() gety() getpoint() MouseWheelEvent extends MouseEvent getwheelrotation() 19
ItemEvent jest generowane przez komponenty z interfejsem ItemSelecable. check boxes, check menu items, toggle buttons, combo boxes. Tylko jedna metoda public void itemstatechanged(itemevent e) 20
getitem() Zwraca obiekt, którego dotyczy zdarzenie. getstatechange() Zwraca typ zdarzenia (zaznaczone lub odznaczone). getitemselectable() Zwraca źródło zdarzenia. 21
Swing pozwala na stosowanie wielu L&F CrossPlatformLookAndFeel Wbudowane w Java SystemLookAndFeel natywne Synth Zdefiniowane w pliku XML 22
23
BorderLayout BoxLayout CardLayout FlowLayout GridBagLayout GridLayout GroupLayout SpringLayout 24