background image

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 

www.michalbereta.pl

 

mbereta@pk.edu.pl 

 

background image

Wątki 

Dwa sposoby implementacji wątków: 
 
1. Klasa dziedzicząca z klasy Thread 
2. Klasa implementująca interfejs Runnable 

background image

Wątki 

background image

Wątki 

konstruktor 

metoda uruchamiana 
po wywołaniu start() 

background image

Wątki 

metoda start() wywoła metodę run() 

background image

Wątki 

długotrwałe obliczenia 

background image

Wątki 

W środku tej klasy nie jesteśmy wątku -> metoda getId() nie 
jest bezpośrednio dostępna! 

background image

Wątki 

obiekt typu Runnable jest przekazywany jako 
parametr do konstruktora obiektu Thread 

background image

Wątki 

Dodamy definicję nowego obiektu Runnable 
jako klasę anonimową (nie ma swojej własnej 
nazwy) 

background image

Wątki 

brak implementacji wymaganej metody run() 

background image

Wątki 

background image

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. 

background image

Proste okna dialogowe 

background image

Proste okna dialogowe 

background image

Proste okna dialogowe 

background image

Proste okna dialogowe 

background image

Proste okna dialogowe 

Zadanie 
 
Zmodyfikuj swój projekt z symulacją totolotka tak, by dialog odbywał się z 
wykorzystaniem okien dialogowych. 

background image

Proste GUI 

background image

Proste GUI 

background image

Proste GUI 

background image

Proste GUI 

background image

Proste GUI 

Przeciągnij wybrane "kontrolki" z palety... 

background image

Proste GUI 

background image

Proste GUI 

...modyfikuj właściwości kontrolek w oknie 
właściwości (Properties)... 

background image

Proste GUI 

background image

Proste GUI 

... dodaj obsługę zdarzeo ...  

... przełączaj się pomiędzy kodem źródłowym a 
projektowaniem wizualnym okna ... 

background image

Proste GUI 

wypełnij swoim kodem. 

background image

Proste GUI 

Uruchom! 

background image

Proste GUI 

Po kliknięciu... 

background image

Proste GUI 

Proste wiązanie (ang. binding

dodaj 

background image

Proste GUI 

Proste wiązanie (ang. binding

po kliknięciu prawym przyciskiem myszki na 
pole tekstowe wybierz "bind“ -> text 

background image

Proste GUI 

Proste wiązanie (ang. binding

Wiązanie dwustronne - modyfikacja źródła 
zmienia wartośd celu i wzajemnie. 

background image

Proste GUI 

Proste wiązanie (ang. binding

wartośd z suwaka 

background image

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. 

background image

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 

background image

Proste GUI 

Liczby pierwsze 

JTextArea 

background image

Proste GUI 

Liczby pierwsze 

długie obliczenia w pętli 

background image

Proste GUI 

Liczby pierwsze 

start 

stop 

background image

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 

background image

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. 

background image

Proste GUI 

Liczby pierwsze 

nowy wątek definiowany 
przez klasę anonimową 

background image

Proste GUI 

Liczby pierwsze 

Efekt: pole tekstowe aktualizowane jest w sposób widoczny, na bieżąco. 

background image

Proste GUI 

Aktualizacja kontrolek przez wątki 

background image

Proste GUI 

Aktualizacja kontrolek przez wątki 

background image

Proste GUI 

Aktualizacja kontrolek przez wątki 

po wyborze wartości z comboboxa jest ona 
kopiowana do pola tekstowego. 

background image

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. 

background image

Proste GUI 

Aktualizacja kontrolek przez wątki 

background image

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. 

background image

Proste GUI 

Aktualizacja kontrolek przez wątki 

Uruchomienie generuje mnóstwo wyjątków - 
inne wątki nie powinny modyfikowad 
komponentów Swinga. 

background image

Proste GUI 

Aktualizacja kontrolek przez wątki 

Użycie "synchronized" nie rozwiązuje problemu. 

background image

Proste GUI 

Aktualizacja kontrolek przez wątki 

Rozwiązanie - dodanie aktualizacji kontrolek do kolejki zdarzeo. 

background image

GUI z JavaBeans 

Nowy projekt 

Okno główne 

background image

GUI z JavaBeans 

Nowa klasa 

background image

GUI z JavaBeans 

Nasza klasa dziedziczy z klasy JPanel - może byd 
komponentem wizualnym, który dodamy do 
palety. 

background image

GUI z JavaBeans 

Insert code -> Override methods -> JComponent 

background image

GUI z JavaBeans 

Nadpisanie metody paint() pozwala na ręczne "rysowanie" komponentu. 

background image

GUI z JavaBeans 

Dodanie komponentu MojPanel do palety. 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

W efekcie MojPanel jest dostępny do wyboru 
w palecie. 

background image

GUI z JavaBeans 

Przeciągnij i upuśd 

background image

GUI z JavaBeans 

Dla MojPanel dostępne są właściwości 
odziedziczone z JPanel, np. background. 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

Możemy definiowad dodatkowe właściwości, np. promieo. 
 
Insert code -> add property : 

background image

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. 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

Możemy modyfikowad wartośd 
naszej właściwości promieo w 
zakładce "Properties" ! 

background image

GUI z JavaBeans 

Możemy również powiązad wartośd promienia z wartością suwaka ! 

background image

GUI z JavaBeans 

Po każdej zmianie wartości suwaka, chcemy 
wywoład metodę repaint() naszego panelu. 

background image

GUI z JavaBeans 

Wypróbuj! 

background image

GUI z JavaBeans 

Aby inne komponenty mogły byd dowiązane do 
promienia potrzebne są pewne zmiany. 

JLabel 

background image

GUI z JavaBeans 

background image

GUI z JavaBeans 

Modyfikacja "settera" 

background image

GUI z JavaBeans 

Zadanie: 
 
Dodaj możliwośd modyfikowania położenia koła. 

background image

GUI z JavaBeans 

Przykład:  
 
Przeanalizuj projekt Kulki.zip 
 
Zadanie: 
 
Dodaj możliwośd zmiany promienia za pomocą suwaka. 

background image

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 

e-mail: 

wiedza@pk.edu.pl

 

www.wiedza.pk.edu.pl