Kurs Javy. Praktyczne programowanie, część III
W poprzedniej części kursu dowiedzieliśmy się, w jaki sposób stworzyć aplet w Javie i jak renderować grafikę. Ta część pozwoli nam na zgłębienie wiedzy z tego zakresu na przykładzie apletu Zegar, który pokazuje sposób zaprogramowania zegara analogowego. Zapoznamy się także z wątkami, czyli zadaniami, które mogą być wykonywane przez program równocześnie.
|
Spis treści |
|---|
|
4. Wątki
4.1. Szkielet programu
Tak jak w poprzedniej części kursu, tak i w tej tworzenie apletu rozpoczynamy od utworzenia projektu, wybierając z paska menu edytora NetBeans File | New Project. Przechodzimy wszystkie znane już nam kroki, wpisując nazwę projektu jako Zegar oraz nazwę pliku apletu o tej samej nazwie. Generuje to nam szablon apletu. Przystępujemy zatem do tworzenia panelu dla apletu w postaci osobnej klasy. W tym celu w oknie Project klikamy prawym przyciskiem myszy nazwę projektu i z menu kontekstowego wybieramy New | Java Class. Jako nazwę nowej klasy wpisujemy PanelZegar. Zostanie wygenerowana pusta klasa. Nie musimy ręcznie umieszczać w niej konstruktora – wystarczy, że umieścimy wskaźnik myszy między otwierającym a zamykającym nawiasem klamrowym i wciśniemy kombinację klawiszy [Ctrl]+[spacja].
Wywoła to okienko z listą, w której zaznaczamy konstruktor. Podwójne kliknięcie jego nazwy lewym przyciskiem myszy wygeneruje ten konstruktor w kodzie klasy.
W identyczny sposób możemy umieścić wewnątrz klasy zmienne czy metody odziedziczone po klasach nadrzędnych, modyfikatory i tym podobne obiekty języka. My chcieliśmy utworzyć klasę stanowiącą panel dla apletu, powinniśmy ją zatem rozszerzyć o klasę JPanel. Po nazwie konstruktora wpisujemy więc słowa extends JPanel. NetBeans podświetli nam JPanel na czerwono, dając znak, że nie mamy zaimportowanego pakietu, z którego pochodzi ta klasa. Pakiet możemy zaimportować automatycznie, wciskając kombinację klawiszy [Ctrl]+[Shift]+[I] (jeśli chcemy zaimportować wszystkie klasy, których jeszcze nie zaimportowaliśmy) lub [Alt]+[Shift]+[I] (gdy zależy nam tylko na tej jednej, którą zaznaczyliśmy).
Wewnątrz konstruktora za pomocą metody setSize() definiujemy rozmiar panelu:
import javax.swing.JPanel;
public class PanelZegar extends JPanel
{
public PanelZegar() { setSize(200,200); }
}
Aby przygotowany panel dodać do powierzchni apletu, przechodzimy w oknie edytora do pliku Zegar.java i wewnątrz metody init() tworzymy egzemplarz klasy PanelZegar. Następnie, korzystając z metody add(), dodajemy go do powierzchni apletu. Aby panel pasował rozmiarami do powierzchni apletu, przed dodaniem określamy jego wymiary:
public void init() {
setSize(200,200);
PanelZegar pz=new PanelZegar();
add(pz);
}
4.2. Rysujemy zegar
Mamy już gotowy pusty panel o odpowiednich rozmiarach. Możemy więc przystąpić do rysowania na jego powierzchni. Rysowanie odbywa się za pośrednictwem obiektu Graphics, dostarczanego przez metodę paintComponent(). To w niej wykonujemy wszystkie operacje związane z grafiką. Na początek rzutujemy obiekt Graphics na obiekt Graphics2D, który dostarcza kilku dodatkowych metod, oprócz tych dostępnych w klasie Graphics:
public void paintComponent(Graphics g)
{
Graphics2D g2=(Graphics2D)g;
}
|
Klasa Graphics2D jest podklasą klasy Graphics i może po niej dziedziczyć. Dlatego też oprócz metod klasy Graphics dostarcza swoje własne metody (klasy Graphics2D). |
|---|
Na początku należy wyczyścić zawartość panelu. Posłużymy się w tym celu metodą clearRect(), której argumentami są współrzędne górnego lewego wierzchołka prostokątnego obszaru oraz jego szerokość i wysokość. Pomoże nam to w prawidłowym odmalowaniu zawartości panelu podczas odświeżania. Następnie przystępujemy do rysowania tarczy zegara. Za pomocą metody setColor() ustawiamy kolor pędzla na jasnoniebieski:
g2.setColor(new Color(0,204,255));
Następnie pobieramy bieżący styl kreski. Służy do tego metoda getStroke() klasy Graphics2D, która zwraca obiekt typu Stroke:
Stroke kreska=g2.getStroke();
Po co pobierać styl kreski? Zachowanie go w zmiennej kreska pozwoli nam później na łatwe wprowadzanie zmian w sposobie rysowania kreski w danym kontekście graficznym i powracanie później do stylu pierwotnego.
Przed narysowaniem niebieskiego koła definiujemy stałą klasową typu całkowitego (integer), która będzie przechowywała długość promienia figury. Stałą określamy słowem kluczowym final zapisanym zaraz po modyfikatorze dostępu. Nazwy stałych przyjęło się pisać wielkimi literami. Warto pamiętać, że zawartości stałej, w przeciwieństwie do zmiennej, nie możemy już zmienić. Modyfikatorem dostępu dla stałej PROMIEN jest private, dzięki czemu będzie ona dostępna jedynie dla klasy, w której została zdefiniowana.
public class PanelZegar extends JPanel {
private final int PROMIEN=80;
....
}
«poprzednia 1 2 3 4 ... 6 następna »
Polecamy
Reklama
Komentarze
Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka
(słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.
Popularne
Pobierałeś pirackie pliki? Uważaj! Kontrole antypirackie w domach użytkowników to codzienność
31
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Debata w sprawie ACTA: internauci spodziewali się chyba czegoś innego
14
Wynalazca WWW przed sądem: walczy tam o wolny dostęp do webowych technologii dla każdego
8
PHP 5.3.9 nie pozwoli hakerom zawiesić serwera. Pozwoli za to przejąć nad nim kontrolę
28
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
Internet w EU bez Facebooka i Google? Firmy nie mają wyboru: albo się dostosują, albo…
10
MSWiA zamówiło narzędzia do „złamania” Tora i podsłuchiwania internautów. Czy złamało przy tym prawo?
89
[Aktualizacja] Facebook zablokował Demotywatory.pl. W czym zawiniły?
36
FBI zamknęło Megaupload. Anonimowi dali się sprowokować. Teraz ich akcja uzasadni potrzebę SOPA?
17
Pobieraczek.pl pozwie internautów, którzy nie chcą płacić abonamentu
1455
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
15
„Donald matole, twój rząd dopadną kibole” – hakerska elita przyłącza się do walki z ACTA
23
Klamka jeszcze nie zapadła. Minister prosi Donalda Tuska, by wstrzymał się z podpisywaniem ACTA
24
Społeczność
slawek22 @WebDev:
Te korporacje i "twórcy" starej daty których tak bronisz nie...
darekp @eimi, a co za różnica między zdobytym pieniędzmi a nie? Spróbuj zdobyć...
Jan "Tablet, na którym można uruchomić prawdziwe Microsoft Office, ładnie...
Maciekkkk Strona nie działa!
WebDev @eimi®
Zdobyte inaczej niż pieniędzmi, czyli jak? Czy mógłbyś to rozwinąć...
eimi @Webdev, a ja jeszcze raz Ci powiem - to co zdobyte inaczej niż pieniędzmi...
sade Powodem dla którego klienci wybierają ten sklep jest ich niewiedza.
- gardius: Dobra hurtownia sportowa (1)
- gardius: Tanie książki gdzie warto kupować? (1)
- Najdmen.pl: PROMOCJA, 500 DOMEN .EU ZA 1 PLN NETTO ! (1)
- VMLine: [Oferta] Serwery VPS Xen-HVM/OpenVZ z darmową administracją (2)
- Marek: Generowanie PDFa (2)
- Marek: problem z menu (2)
- Marek: Własne checkboxy w HTML,CSS (1)
Polecane książki
Praca
Czytaj Webhosting
Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.
Zarejestruj domenę
Sprawdź dostępność swojej domeny:
| .pl: | 0 zł | .com: | 19.90 zł | |
|---|---|---|---|---|
| .com.pl: | 0 zł | .eu: | 19.90 zł |










#1 Master Pain 2008-07-07 11:47:52 0
None
#2 artak 2008-08-14 13:58:18 0
None
#3 Piotr Ch. 2008-10-06 10:34:45 0
None
#4 Nicnak 2009-04-22 14:50:42 0
IP: 80.244.156.[...] Mozilla/5.0 (Windows; U; Windows NT 5.0; pl; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
#5 krzys 2009-05-17 23:34:32 0
IP: 193.58.232.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
#6 mistzru 2009-05-31 16:13:42 0
IP: 193.58.232.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
#7 rafals 2009-08-03 11:52:44 0
IP: 83.14.205.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.39 Safari/530.5
#8 majkeluam 2010-07-15 21:45:16 0
IP: 89.191.130.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4
#9 majkeluam 2010-07-15 22:59:33 1
IP: 89.191.130.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4
#10 Zbigi® 2011-03-06 18:45:10 0
IP: 46.134.136.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 GTB7.1 ( .NET4.0E)