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
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()
długotrwałe obliczenia Wątki
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 3 2
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!
Po kliknięciu... Proste GUI
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 :
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
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 e-mail: wiedza@pk.edu.pl www.wiedza.pk.edu.pl