Programowanie w języku Java WYKŁAD -...

99
Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: [email protected] www: http://www.pk.edu.pl/~pzabawa 05.05.2014 Zakład Inżynierii Oprogramowania

Transcript of Programowanie w języku Java WYKŁAD -...

Page 1: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

Programowanie w języku Java

WYKŁAD

dr inż. Piotr Zabawa

Certyfikowany Konsultant IBM/Rational

e-mail: [email protected]

www: http://www.pk.edu.pl/~pzabawa 05.05.2014

Zakład Inżynierii Oprogramowania

Page 2: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

WYKŁAD 11GUI w Swing – cz. 1

Wykład został w znacznej mierze oparty na:

http://www.tutorialspoint.com/swing/

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 3: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 4: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

GUI = Graphical User Interface

Może być związane:

• z aplikacją desktopową (nasz wykład)

• z aplikacją webową (inne przedmioty)

Z punktu widzenia inżynierii oprogramowania opracowanie

wymagań/architektury/projektu/implementacji/testów prace w projekcie

informatycznym nad GUI związane są z tzw. user experience.

Istnieją dobre praktyki związane z projektowaniem GUI. Oprócz

ogólnych praktyk (kwestie techniczne) należy mieć na względzie fakt, że

w różnych dziedzinach zastosowań mogą być różne zwyczaje.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 5: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

Technologie służące wytwarzaniu GUI niezależnego od platformy

dostępne w 2013 roku:

• QML

• Qt

• Juce

• Adobe Air

• Mono+GTK

• Java FX

• SWT

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 6: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

W ramach Java SE GUI może być realizowane w postaci aplikacji

desktopowej zarządzanej bezpośrednio przez Window Manager danego

systemu operacyjnego albo w postaci apletów zarządzanych przez

przeglądarkę. Koncepcja apletów została jednak zdominowana przez

bardziej dojrzałe technologie webowe, dlatego zostanie całkowicie

pominięta w czasie wykładów.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 7: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

Na kolejnym slajdzie pokazano kontekst działania GUI nawiązujący

do rozwiązań znanych z Linuxa.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 8: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 9: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

Na kolejnym slajdzie pokazano strukturę okna w systemie

okienkowym.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 10: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 11: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 12: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Do niedawna uważano, że Swing jest wzorcowo zaprojektowaną

biblioteką ilustrującą dobre praktyki stosowane w języku Java. Jednak są

przeciwnicy tego podejścia/realizacji oraz trwają prace nad JavaFX –

biblioteką GUI mającą wkrótce (Java 9?) zastąpić bibliotekę Swing.

W ramach wykładu omówimy Swing ze względu na następujące

ograniczenia w Java FX:

• Braki w implementacji dostępnej w Java 7

• Niedojrzałość jej implementacji w Java 8

• Brak dostatecznego wsparcia narzędziowego

• Brak dostatecznego wsparcia społecznościowego (tutoriale, książki,

fora dyskusyjne,…)

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 13: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Zalety biblioteki Swing:

• Sprzętowo przyspieszane wyświetlanie

• MVC

• Wykorzystanie technologii Java – managed code

• Wsparcie przez środowiska deweloperskie – projektowanie

WYSIWYG, narzędzia testowania

• Wsparcie społecznościowe (por. rys)

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 14: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 15: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Wady biblioteki Swing w Java 7:

• Zdarzają się krytyczne błędy, które długo pozostają nierozwiązane (np.

File.exists)

• Ograniczenia związane z Mac OS

• Konieczność umieszczania JRE w dystrybucji oprogramowania

• Ograniczenia implementacyjne związane z BufferedImage – trudności

z przyspiesznaiem sprzętowym, trudności z wyświetlaniem obiektów

rastrowych BufferedImage

• Problemy z wyświetlaniem GUI przy dostępie przez VMware lub

przez remote desktop

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 16: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Przegląd

• Swing API stanowi zbiór rozszerzalnych komponentów GUI

ułatwiających programiście implementację GUI aplikacji

desktopowych. Biblioteka ta została skonstruowana na bazie AWT i

stanowi jej nakładkę (wrapper). Komponenty Swing zostały

opracowane zgodnie z wzorcem architektonicznym MVC i spełniają

następujące założenia:

• Pojedyncze API zapewniające obsługę różnorodnych widoków

• Możliwość automatycznego generowania aplikacji z modelu

• Zorientowanie na wsparcie narzędziowe

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 17: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Architektura MVC

Architektura Swing API wspiera MVC następująco:

• Model reprezentuje dane komponentów.

• View reprezentuje widok danych komponentu.

• Controller pobiera dane od użytkownika z widoku i odzwierciedla

zmiany w danych komponentu.

• Komponenty Swing mają Model jako osobny element a View i

Controller należą do elementów GUI. Dzięki temu Swing jest łatwo

rozszerzalny.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 18: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Cechy Swing

• Light Weight – komponenty Swing są niezależne od natywnych API

systemów operacyjnych ponieważ jego komponenty nie odwołują się

wprost do API systemu operacyjnego.

• Rich controls - Swing dostarcza bogatego zbioru zaawansowanych

kontrolek jak np. Tree, TabbedPane, slider, colorpicker, table controls

• Highly Customizable – kontrolki Swing mogą być łatwo

dostosowywane do potrzeb użytkownika gdyż ich wygląd jest

niezależny od reprezentacji wewnętrznej.

• Pluggable look-and-feel – wygląd aplikacji, których GUI oparte jest

na Swing API może być zmieniany w czasie wykonania.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 19: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Kontrolki Swing

Każde GUI uwzględnia następujące trzy aspekty:

• UI elements: Główne elementy wizualne dostępne dla użytkownika.

Ich przykłady zostaną omówione dalej.

• Layouts: Określają jak poszczególne kontrolki powinny być położone

na ekranie. Zagadnienie to zostanie omówione dalej.

• Behavior: Są związane ze zdarzeniami generowanymi przez

użytkownika działającego na elementach GUI. Pozwalają obsługiwać

zdarzenia w sposób asynchroniczny i wielowątkowy.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 20: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 21: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa Component

• Klasa Component jest bazową klasą abstrakcyjną dla kontrolek AWT

nie będących elementami menu. Component reprezentuje obiekt

mający reprezentację graficzną.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 22: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing - klasa Container

• Klasa Container jest nadklasą dla kontenerów AWT. Obiekt klasy

Container może zawierać inne komponenty AWT.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 23: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing - klasa JComponent

• Klasa JComponent jest klasą bazową dla wszystkich komponentów

Swing z wyjątkiem komponentów leżących najwyżej w hierarchii.

Aby skorzystać z komponentu dziedziczącego z JComponent należy

umieścić go w hierarchii kontenerów, której wierzchołkiem jest jeden

z kontenerów Swing.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 24: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JLabel

• Klasa JLabel może wyświetlać

tekst i/lub obraz. Zawartość obiektu

Label może być pozycjonowana w

pionie i w poziomie względem tego

komponentu. Domyślnie jest

wycentrowana w pionie. Etykiety

tekstowe są domyślnie ustawione

przy lewej krawędzi kontrolki, a

graficzne są domyślnie

wycentrowane.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 25: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JButton

• Klasa JButton stanowi

implementację przycisku.

Komponent ten ma etykietę (tekst

i/lub grafika – jak Label) i generuje

zdarzenia w czasie wciskania.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 26: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JColorChooser

• Klasa JColorChooser dostarcza

panelu kontrolek

zaprojektowanych w celu

umożliwienia użytkownikowi

manipulowania kolorami i

dokonywania wyboru koloru.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 27: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing JCheckBox Class

• Klasa JCheckBox jest

implementacją check-boxu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 28: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing - klasa JRadioButton

• Klasa JRadioButton jets

implementacją radio-button.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 29: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JList

• Klasa JList jest komponentem

wyświetlającym listę obiektów

pozwalającą użytkownikowi

wybrać jeden lub wiele z nich.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 30: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing klasa JComboBox

• Klasa JComboBox jest

komponentem zawierającym

przycisk lub pole edytowalne oraz

listę rozwijaną dynamicznie.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 31: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing klasa JTextField

• Klasa JTextField jest

komponentem pozwalającym na

edytowanie pojedynczej linii

tekstu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 32: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing –klasa JPasswordField

• Klasa JPasswordField jest

komponentem dedykowanym do

obsługi funkcjonalności hasła i

pozwala na edytowanie

pojedynczej linii tekstu maskując

jego treść.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 33: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JTextArea

• Klasa JTextArea jest

wieloliniowym obszarem do edycji

tekstu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 34: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa ImageIcon

• Klasa ImageIcon jest

implementacją interfejsu Icon

wyświetlającego ikonę dla obrazu

graficznego.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 35: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JScrollBar

• Klasa JScrollBar jest

implementacją paska przewijania.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 36: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JOptionPane

• Klasa JOptionPane jest

komponentem dostarczającym

standardowych metod dla

wyskakującego okienka

dialogowego służącego

poinformowaniu użytkownika o

czymś.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 37: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JFileChooser

• Klasa JFileChooser jest komponentem dostarczającym

użytkownikowi prostego mechanizmu wybierania pliku.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 38: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JProgressBar

• Klasa JProgressBar jest

komponentem wyswietlającym

postęp jakiegoś zadania.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 39: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JSlider

• Klasa JSlider jest komponentem

pozwalającym użytkownikowi na

graficzny wybór wartości za

pomocą suwaka poruszającego

się w określonym zakresie.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 40: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - komponenty

Swing – klasa JSpinner

• Klasa JSpinner jest

komponentem pozwalającym

użytkownikowi na wybranie

wartości parametru z

uporządkowanej sekwencji

wartości za pomocą strzałek

przewijania lub za pomocą

pola wejściowego.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 41: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasy Event

• Klasy Event reprezentują zdarzenia. Java dostarcza wielu różnych

wyspecjalizowanych klas tej kategorii. Omówione zostaną

przykładowe, najczęściej używane.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 42: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

Klasa EventObject

• Jest to klasa bazowa, z której wyprowadzane są wszystkie klasy

zdarzeń. Obiekty tych klas konstruowane są w taki sposób, aby źródło

zdarzenia – obiekt, w którym zdarzenie zostało zainicjowane było w

nim reprezentowane za pomocą referencji do tego obiektu. Klasa ta

jest zdefiniowana w pakiecie java.util.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 43: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa AWTEvent

• Jest to klasa bazowa dla wszystkich zdarzeń AWT. Zastępuje ona

klasy zdarzeń wywodzonych z klasy java.awt.Event. Jest ona

zdefiniowana w pakiecie java.awt. Za pomocą metody getID() można

zidentyfikować typ zdarzenia.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 44: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa ActionEvent

• Klasa ta jest zdefiniowana w pakiecie java.awt.event. Obiekt

ActionEvent jest generowany gdy zostanie wciśnięty przycisk lub

nastąpi kliknięcie lub podwójne kliknięcie na pozycji z listy.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 45: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa InputEvent

• Klasa InputEvent jest klasą bazową dla wszystkich zdarzeń

generowanych na poziomie komponentów. Zdarzenia wejściowe są

dostarczane do Listener’ów zanim zostaną obsłużone przez źródło, w

którym powstały. Pozwala to na przejęcie kontroli nad

wygenerowanym zdarzeniem przez Listener’a lub podklasę

komponentu zanim komponent źródłowy obsłuży je w sposób dla

niego charakterystyczny. Np. przejęcie zdarzenia mousePressed

wygenerowanego na komponencie przycisku Button pozwala

zabezpieczyć obiekt klasy Button przed aktywowaniem go.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 46: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa KeyEvent

• Obiekt tej klasy jest generowany w czasie wprowadzania z klawiatury

znaku. Są trzy rodzaje takich zdarzeń reprezentowane za pomocą

następujących stałych całkowitych:

– KEY_PRESSED

– KEY_RELASED

– KEY_TYPED

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 47: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa MouseEvent

• Zdarzenie to świadczy o wykonaniu czynności za pomocą myszy na

komponencie. Jest ono generowane gdy:

– Zostanie wciśnięty przycisk myszy

– Zostanie zwolniony przycisk myszy

– Zostanie kliknięty (wciśnięty i zwolniony) przycisk myszy

– Kursor myszy wejdzie w obszar komponentu

– Kursor myszy znajduje się w obszarze komponentu

– Mysz zostanie poruszona

– Przycisk myszy zostanie wciśnięty i przytrzymany

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 48: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa WindowEvent

• Obiekt tej klasy reprezentuje zmianę stanu okna. Zdarzenie to jest

generowane w przypadku otwarcia, zamknięcia, aktywacji,

dezaktywacji, zwinięcia, rozwinięcia, uzyskania lub utraty fokusu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 49: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa AdjustmentEvent

• Klasa AdjustmentEvent reprezentuje zdarzenie zmiany rozmiaru

generowane przez komponenty mogące zmieniać rozmiar (nie

wszystkie).

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 50: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING - klasa ComponentEvent

• Klasa ComponentEvent reprezentuje zdarzenia generowane gdy

komponent zostanie przesunięty, zmieni rozmiar lub widoczność

(zostanie ukryty lub odsłonięty).

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 51: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa ContainerEvent

• Klasa ContainerEvent reprezentuje zdarzenie informujące o zmianie

zawartości kontenera związane z dodaniem do niego lub usunięciem z

niego komponentu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 52: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – interfejs MouseMotionEvent

• Interfejs MouseMotionEvent świadczy o czynności myszy wykonanej

na komponencie. Zdarzenie takie jest generowane przez komponent

gdy mysz zostanie przesunięta lub wciśnięta nad nim.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 53: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - zdarzenia

SWING – klasa PaintEvent

• Klasa PaintEvent jest używana do zapewnienia skolejkowania

wywołań metody paint/update wraz z innymi zdarzeniami

dostarczanymi z kolejki zdarzeń.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 54: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – klasy Event Listeners

• Event listener reprezentuje interfejsy odpowiedzialne za obsługę

zdarzeń. Java dostarcza wielu klas Event listener’ów – tutaj zostaną

pokazana najczęściej wykorzystywane. Każda metoda event listener’a

ma jeden argument będący odpowiednią podklasą klasy EventObject.

Np. metody klasy będącej mouse event listener’em przyjmują jako

argument obiekty klasy MouseEvent, gdzie MouseEvent dziedziczy z

klasy EventObject.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 55: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

Interfejs EventListner

• Jest to interfejs, który musi być rozszerzany przez każdy interfejs event

listenera.Definicja tego interfejsu znajduje się w pakiecie java.util.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 56: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs ActionListener

• Musi być implementowany przez każdą klasę przetwarzającą

ActionEvent. Obiekt tej klasy musi być zarejestrowany w

komponencie. Można tego dokonać za pomocą metody

addActionListener(). Kiedy powstanie action event, wtedy zostanie

wywołana metoda actionPerformed() obiektu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 57: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs ComponentListener

• Powinna go implementować klasa, która przetwarza ComponentEvent.

Obiekt tej klasy musi zostać zarejestrowany w komponencie. Można

tego dokonać za pomocą metody addComponentListener(). Zdarzenia

component event są generowane jedynie dla celów informacyjnych.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 58: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs ItemListener

• Powinien zostać zaimplementowany przez klasę przetwarzającą

ItemEvent. Obiekt tej klasy musi zostać zarejestrowany w

komponencie. Można tego dokonać za pomocą metody

addItemListener(). Gdy pojawi się action event, wtedy zostanie

wywołana metoda itemStateChanged() obiektu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 59: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs KeyListener

• Powinien zostać zaimplementowany przez klasę przetwarzającą

KeyEvent. Obiekt tej klasy musi zostać zarejestrowany w

komponencie. Można tego dokonać za pomocą metody

addKeyListener().

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 60: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs MouseListener

• Klasa przetwarzająca MouseEvent powinna implementować ten

interfejs. Obiekt tej klasy musi zostać zaimplementowany w

komponencie. Można tego dokonać za pomocą metody

addMouseListener().

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 61: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs WindowListener

• Klasa przetwarzająca WindowEvent powinna implementować ten

interfejs. Obiekt tej klasy musi zostać zarejestrowany w komponencie.

Można tego dokonać za pomocą metody addWindowListener().

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 62: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs AdjustmentListener

• Interfejs AdjustmentListener jest używany do odbierania zdarzeń

dopasowania (adjustment events). Klasa przetwarzająca te zdarzenia

musi implementować ten interfejs.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 63: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs ContainerListener

• Interfejs ContainerListener jest używany do odbierania zdarzeń

container events. Klasa przetwarzająca te zdarzenia musi

implementować ten interfejs.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 64: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs MouseMotionListener

• Interfejs MouseMotionListener jest używany do odbierania zdarzeń

mouse motion events generowanych na komponencie. Klasa

przetwarzająca te zdarzenia musi implementować ten interfejs.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 65: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – interfejs FocusListener

• Interfejs FocusListener jest używany do odbierania zdarzeń focus

events. Klasa przetwarzająca te zdarzenia musi implementować ten

interfejs.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 66: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

Adaptery SWING Event Adapters

• Adaptery są klasami abstrakcyjnymi służącymi odbieraniu różnych

zdarzeń. Metody w tych klasach są puste. Klasy te służą jako Utility

Classes do tworzenia obiektów listener’ów.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 67: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – klasa FocusAdapter

• Klasa FocusAdapter jest abstrakcyjną klasą adaptera do odbierania

zdarzeń focus events.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 68: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – klasa KeyAdapter

• Klasa KeyAdapter jest klasą abstrakcyjną adaptera służącą odbieraniu

zdarzeń keyboard events.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 69: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – klasa MouseAdapter

• Klasa MouseAdapter jest abstrakcyjną klasą adaptera do odbierania

zdarzeń mouse events.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 70: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – klasa MouseMotionAdapter

• Klasa MouseMotionAdapter jest klasą abstrakcyjną adaptera do

odbierania zdarzeń mouse motion events.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 71: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing – obsługa zdarzeń

SWING – klasa WindowAdapter

• Klasa WindowAdapter jest abstrakcyjną klasą adaptera do odbierania

zdarzeń window events.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 72: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING Layouts

• Layout oznacza ułożenie komponentów w kontenerze w określonych

pozycjach. Zadanie układania komponentów realizowane jest

automatycznie przez Layout Manager.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 73: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

Layout Manager

• Automatycznie rozmieszcza wszystkie komponenty w kontenerze. Jeśli go nie

określimy, to jest używany domyślny. Ręcznie nie opłaca się implementować jego

funkcjonalności – jest to trudne z następujących powodów:

– Obsłużenie dużej ilości kontrolek w kontenerze jest trudne

– Zwykle nie dysponujemy informacją o rozmiarach komponentu wtedy gdy chcemy

go odpowiednio umieścić w kontenerze.

• Swing dostarcza wielu klas layout manager. Obsługują one również skutki zmiany

rozmiaru okna kontenera rozmieszczając ponownie w nim komponenty.

• Z każdą instancją klasyContainer skojarzony jest obiekt layout managera. Każda klasa

layout managera musi implementować interfejs LayoutManager.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 74: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – iterfejs LayoutManage

• Interfejs LayoutManager jest używany do definiowania interfejsu

klas wiedzących jak rozmieszczać komponenty w kontenerach.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 75: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – interfejs LayoutManager2

• Interfejs LayoutManger jest używany do definiowania interfejsu dla

klas wiedzących jak rozmieszczą komponenty w kontenerach w

oparciu o obiekt layout constraints.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 76: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – klasa BorderLayout

• Klasa BorderLayout rozmieszcza

komponenty tak aby ulokować je w

pięciu regionach: east, west, north,

south i center. Każdy region może

zawierać tylko jeden komponent i

każdy komponent jest

identyfikowany za pomocą

odpowiedniej stałej NORTH,

SOUTH, EAST, WEST i

CENTER.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 77: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – klasa CardLayout

• Klasa CardLayout rozmieszcza

każdy komponent w kontenerze

jako kartę. Wdanej chwili może

być widoczna tylko jedna karta i

kontener jest wykorzystywany jako

stos kart.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 78: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – klasa FlowLayout

• Klasa FlowLayout rozmieszcza

komponenty od lewej strony do

prawej.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 79: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – klasa GridLayout

• Klasa GridLayout rozmieszcza

komponenty w siatce prostokątnej.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 80: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – klasa GridBagLayout

• Klasa GridBagLayout

rozmieszcza komponenty

horyzontalnie i wertykalnie.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 81: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – klasa GroupLayout

• Klasa GroupLayout grupuje

komponenty hierarchicznie.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 82: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - layout

SWING – klasa SpringLayout

• Klasa SpringLayout rozmieszcza

komponenty na podstawie zbioru

ograniczeń (constraints).

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 83: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

Klasy SWING Menu

• Każde główne okno aplikacji ma w górnej części skojarzony z nim

pasek menu. Pasek menu składa się z wielu pozycji dostępnych dla

użytkownika aplikacji. Ponadto każdy wybór może zawierać listę opcji

zwanych drop down menu. Kontrolki Menu i MenuItem są podklasami

MenuComponent.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 84: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 85: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

SWING – klasa JMenuBar

• Klasa JMenuBar dostarcza

implementacji paska menu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 86: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

SWING – klasa JMenuItem

• Klasa JMenuItem reprezentuje pozycję w menu. Wszystkie pozycje w

menu powinny dziedziczyć z klasy JMenuItem lub z jednej z jej

podklas. Domyślnie skojarzona jest z etykietą.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 87: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

SWING – klasa JMenu

• Klasa Menu reprezentuje element

menu rozwijany z poziomu paska

menu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 88: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

SWING – klasa JCheckboxMenuItem

• Klasa JCheckboxMenuItem reprezentuje check-box, który może

znajdować się w menu. Wybranie check-box’a w menu zmienia stan

kontrolki z on na off albo z off na on.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 89: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

SWING – klasa JRadioButtonMenuItem

• Klasa JRadioButtonMenuItem reprezentuje radio-button, który może

zostać umieszczony w menu. Wybranie radio-button w menu zmienia

stan kontrolki z on na off albo z off na on.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 90: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - menu

SWING – klasa JPopupMenu

• Klasa ta reprezentuje menu rozwijane dynamicznie w określonej

pozycji komponentu.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 91: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - kontenery

Kontenery SWING

Kontenery są integralną częścią komponentów GUI w SWING.

Kontener dostarcza miejsca, w którym może znaleźć się komponent.

Container w AWT jest komponentem pozwalającym na dodawanie do

niego komponentów. Warto zwrócić uwagę na następujące własności

kontenerów:

• Podklasy Container są nazywane kontenerami. Np. JPanel, JFrame i

JWindow.

• Kontener może zawierać jedynie komponenty.

• Z każdym kontenerem związany jest charakterystyczny dla niego

domyślny layout. Może on zostać zmieniony za pomocą przeciążonej

metody setLayout().

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 92: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - kontenery

SWING – klasa JPanel

• Klasa JPanel jest ogólnym lekkim

kontenerem.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 93: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - kontenery

SWING – klasa JFrame

• Klasa JFrame jest rozszerzeniem

klasy java.awt.Frame

wprowadzającą do niej wsparcie

dla komponentowej architektury

JFC/Swing.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 94: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing - kontenery

SWING – klasa JWindow

• Klasa JWindow jest kontenerem,

który może zostać wyświetlony

ale nie zawiera paska tytułu ani

przycisków zarządzania oknem.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 95: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Dobre praktyki w Swing:

• Każde okno powinno rozszerzać JFrame albo JDialog (w zależności od

typu okna). Ułatwia to zarządzanie własnościami okna bez

konieczności odwoływania się do konkretnego obiektu jego podklasy..

• Metoda main() powinna zostać umieszczona w osobnej klasie.

Zwiększa to prawdopodobieństwo ponownego wykorzystania okna.

• Listener’y powinny być implementowane w anonimowych klasach

wewnętrznych w Java 7 lub za pomocą wyrażeń lambda w Java 8.

Klasa główna nie powinna implementować żadnego listenera. Chroni

to przed atakiem polegającym na przechwytywaniu komunikatów

poza obiektem, z którym są one skojarzone.

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 96: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

• Klasy GridBagLayout należy używać ostrożnie. Jest to bardzo bogaty

Layout Manager, chociaż trudny do opanowania.

• Klasy JPanel należy używać ostrożnie. Należy najpierw zastanowić

się, które komponenty powinny zmienić swój rozmiar wraz ze zmianą

rozmiaru okna a następnie zgrupować te komponenty w JPanel.

Czasem wymaga to zagnieżdżania w sobie obiektów klasy JPanel.

• Zawsze należy zaczynać od utworzenia wątku dispatchera zdarzeń.

• Najpierw należy wywołać metodę pack() potem dopasować rozmiar

ramki a dopiero potem wywołać metodę setVisible().

• Warto rozważyć użycie metody getMaximumWindowBounds():

GraphicsEnvironment env =

GraphicsEnvironment.getLocalGraphicsEnvironment();

Rectangle bounds = env.getMaximumWindowBounds();

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 97: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swing

Przykład zastosowania powyższych dobrych praktyk

public class Main {

public static void main(String[] args) {

final String text = args[0];

SwingUtilities.invokeLater(new Runnable() {

@Override public void run() {

final MyWindow wnd = new MyWindow(text);

wnd.setVisible(true);

}

});

}

}

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 98: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

GUI w Swingpublic class MyWindow extends JFrame {

public MyWindow(String text) {

super("My Window");

setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);

addWindowListener(new WindowAdapter() {

@Override public void windowClosing(WindowEvent e) {

MyWindow.this.setVisible(false);

MyWindow.this.dispose();

}

});

final JButton btn = new JButton(text);

btn.addActionListener(new ActionListener() {

@Override public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(MyWindow.this, "Button Pressed",

"Hey", JOptionPane.INFORMATION_MESSAGE);

}

});

setLayout(new FlowLayout()); add(btn); pack();

}

}

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania

Page 99: Programowanie w języku Java WYKŁAD - riad.pk.edu.plriad.pk.edu.pl/~pzabawa/files/JP/ProgramowanieJava_W10.pdf · GUI w Swing Architektura MVC Architektura Swing API wspiera MVC

Koniec

dr inż. Piotr Zabawa Instytut Informatyki Wydział Fizyki, Matematyki i Informatyki

Zakład Inżynierii Oprogramowania