Prezentacja współfinansowana przez Unię Europejską ze środków Europejskiego Funduszu Społecznego
w ramach projektu
Wzmocnienie znaczenia Politechniki Krakowskiej w kształceniu przedmiotów ścisłych
i propagowaniu wiedzy technicznej w regionie
Java Podstawy
Michał Bereta
mbereta@pk.edu.pl
Wątki
Dwa sposoby implementacji wątków:
1. Klasa dziedzicząca z klasy Thread
2. Klasa implementująca interfejs Runnable
Wątki
Wątki
konstruktor
metoda uruchamiana
po wywołaniu start()
Wątki
metoda start() wywoła metodę run()
Wątki
długotrwałe obliczenia
Wątki
W środku tej klasy nie jesteśmy wątku -> metoda getId() nie
jest bezpośrednio dostępna!
Wątki
obiekt typu Runnable jest przekazywany jako
parametr do konstruktora obiektu Thread
Wątki
Dodamy definicję nowego obiektu Runnable
jako klasę anonimową (nie ma swojej własnej
nazwy)
Wątki
brak implementacji wymaganej metody run()
Wątki
Wątki
Zadanie
Zaimplementuj dwie niezależne symulacje losowania totolotka, każda powinna byd
uruchomiona w osobnym wątku.
Podpowiedź: zapytaj użytkownika o jego liczby w głównym wątku, natomiast
wielokrotne losowanie powinno odbywad się w osobnych wątkach, przykładowo:
osobny wątek dla losowao w środy, osobny dla losowao w soboty. Każdy wątek
informuje, jeśli liczby użytkownika zostały wylosowane i kooczy swoje działanie.
Proste okna dialogowe
Proste okna dialogowe
Proste okna dialogowe
Proste okna dialogowe
Proste okna dialogowe
Zadanie
Zmodyfikuj swój projekt z symulacją totolotka tak, by dialog odbywał się z
wykorzystaniem okien dialogowych.
Proste GUI
Proste GUI
Proste GUI
Proste GUI
Proste GUI
Przeciągnij wybrane "kontrolki" z palety...
Proste GUI
1
2
3
Proste GUI
...modyfikuj właściwości kontrolek w oknie
właściwości (Properties)...
Proste GUI
Proste GUI
... dodaj obsługę zdarzeo ...
... przełączaj się pomiędzy kodem źródłowym a
projektowaniem wizualnym okna ...
Proste GUI
wypełnij swoim kodem.
Proste GUI
Uruchom!
Proste GUI
Po kliknięciu...
Proste GUI
Proste wiązanie (ang. binding)
dodaj
Proste GUI
Proste wiązanie (ang. binding)
po kliknięciu prawym przyciskiem myszki na
pole tekstowe wybierz "bind“ -> text
Proste GUI
Proste wiązanie (ang. binding)
Wiązanie dwustronne - modyfikacja źródła
zmienia wartośd celu i wzajemnie.
Proste GUI
Proste wiązanie (ang. binding)
wartośd z suwaka
Proste GUI
Zadania
1. Zaimplementuj prosty kalkulator z działaniami +, -, * oraz /.
2. Zmodyfikuj swój projekt z symulacją totolotka tak, by dialog odbywał się z
wykorzystaniem prostego interfejsu graficznego.
Proste GUI
Liczby pierwsze
Przykład
Długie obliczenia w tle - generowanie kolejnych liczb pierwszych
DlugaPracaWTle.zip – implementacja bez wątków
DlugaPracaWTle2.zip – implementacja z wątkami
Proste GUI
Liczby pierwsze
JTextArea
Proste GUI
Liczby pierwsze
długie obliczenia w pętli
Proste GUI
Liczby pierwsze
start
stop
Proste GUI
Liczby pierwsze
Efektem będzie charakterystyczne zacinanie się(zawieszanie)
aplikacji na czas wykonywania obliczeo.
Powód: obliczenia wykonywane są w tym samym (głównym)
wątku co obsługa zdarzeo komponentów wizualnych naszej
aplikacji.
brak uaktualnienia obszaru tekstowego
brak reakcji
Proste GUI
Liczby pierwsze
Wersja z osobnym wątkiem mającym za zadanie przeprowadzenie obliczeo.
Wątek główny jest wolny i może zając się odświeżaniem interfejsu.
Proste GUI
Liczby pierwsze
nowy wątek definiowany
przez klasę anonimową
Proste GUI
Liczby pierwsze
Efekt: pole tekstowe aktualizowane jest w sposób widoczny, na bieżąco.
Proste GUI
Aktualizacja kontrolek przez wątki
Proste GUI
Aktualizacja kontrolek przez wątki
Proste GUI
Aktualizacja kontrolek przez wątki
po wyborze wartości z comboboxa jest ona
kopiowana do pola tekstowego.
Proste GUI
Aktualizacja kontrolek przez wątki
Każdy wątek w nieskooczonej pętli usuwa losowo element z comboboxa a następnie
dodaje nowy, losowy.
Proste GUI
Aktualizacja kontrolek przez wątki
Proste GUI
Aktualizacja kontrolek przez wątki
Wątek jako klasa anonimowa ma dostęp do
wszystkich pól i metod klasy, w której jest
zawarty.
Proste GUI
Aktualizacja kontrolek przez wątki
Uruchomienie generuje mnóstwo wyjątków -
inne wątki nie powinny modyfikowad
komponentów Swinga.
Proste GUI
Aktualizacja kontrolek przez wątki
Użycie "synchronized" nie rozwiązuje problemu.
Proste GUI
Aktualizacja kontrolek przez wątki
Rozwiązanie - dodanie aktualizacji kontrolek do kolejki zdarzeo.
GUI z JavaBeans
Nowy projekt
Okno główne
GUI z JavaBeans
Nowa klasa
GUI z JavaBeans
Nasza klasa dziedziczy z klasy JPanel - może byd
komponentem wizualnym, który dodamy do
palety.
GUI z JavaBeans
Insert code -> Override methods -> JComponent
GUI z JavaBeans
Nadpisanie metody paint() pozwala na ręczne "rysowanie" komponentu.
GUI z JavaBeans
Dodanie komponentu MojPanel do palety.
GUI z JavaBeans
GUI z JavaBeans
GUI z JavaBeans
W efekcie MojPanel jest dostępny do wyboru
w palecie.
GUI z JavaBeans
Przeciągnij i upuśd
GUI z JavaBeans
Dla MojPanel dostępne są właściwości
odziedziczone z JPanel, np. background.
GUI z JavaBeans
GUI z JavaBeans
Możemy definiowad dodatkowe właściwości, np. promieo.
Insert code -> add property :
GUI z JavaBeans
Stosowanie konwencji
"getterów" i "setterów"
pozwala na definiowanie
właściwości, do których
można mied dostęp podczas
wizualnego projektowania
okna.
GUI z JavaBeans
GUI z JavaBeans
GUI z JavaBeans
GUI z JavaBeans
GUI z JavaBeans
GUI z JavaBeans
Możemy modyfikowad wartośd
naszej właściwości promieo w
zakładce "Properties" !
GUI z JavaBeans
Możemy również powiązad wartośd promienia z wartością suwaka !
GUI z JavaBeans
Po każdej zmianie wartości suwaka, chcemy
wywoład metodę repaint() naszego panelu.
GUI z JavaBeans
Wypróbuj!
GUI z JavaBeans
Aby inne komponenty mogły byd dowiązane do
promienia potrzebne są pewne zmiany.
JLabel
GUI z JavaBeans
GUI z JavaBeans
Modyfikacja "settera"
GUI z JavaBeans
Zadanie:
Dodaj możliwośd modyfikowania położenia koła.
GUI z JavaBeans
Przykład:
Przeanalizuj projekt Kulki.zip
Zadanie:
Dodaj możliwośd zmiany promienia za pomocą suwaka.
Projekt
Wzmocnienie znaczenia Politechniki Krakowskiej w kształceniu
przedmiotów ścisłych i propagowaniu wiedzy technicznej w regionie
współfinansowany przez Unię Europejską ze środków
Europejskiego Funduszu Społecznego
Instytut Fizyki Politechniki Krakowskiej
pok. F206a, ul. Podchorążych 1, 30-084 Kraków
tel.: +48 12 6370666 w. 28, faks: +48 12 6371446
www.wiedza.pk.edu.pl