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 »
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
Nazwa padła ofiarą szantażystów, inni polscy hosterzy też zagrożeni?
22
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Premiera Diablo 3 wzbudziła dyskusję na temat gier, które zawsze chcą być online
19
Nowy problem z Windows 8: bootuje się za szybko
10
Amerykańscy rodzice straszeni „e-narkotykami” dostępnymi w Sieci
21
Anonymous upubliczniają 1,7 GB danych wykradzionych Departamentowi Sprawiedliwości USA
12
Blueseed: libertariańska sztuczna wyspa przyciągnęła już ponad sto startupów z całego świata
8
Rewolucja w Firefoksie, nowa łatka czterokrotnie ograniczyła zużycie pamięci
20
Darmowy Internet od Aero2. Jak go zdobyć i jakie są prawdziwe koszta? Instrukcja krok po kroku
11
CVDazzle: makijaż jest w stanie pokonać automatyczne systemy ulicznego monitoringu
3
Programowanie w środowisku Android – wprowadzenie do projektowania aplikacji dla urządzeń mobilnych
17
Ubuntu 12.04 LTS już dostępny: stabilna dystrybucja na następne pięć lat?
28
Zostań webmasterem polskiego rządu, zarobisz na komfortowe życie dla siebie i swojej rodziny
33
Społeczność
anga star za droga ludzie wy myślicie!?Jestem 4 klasistką rodzice się nigdy nie...
Jan Zwyczajnych filmów tak kręcić się nie da co najwyżej krótkie scenki jak w...
piotrek____ @asdfgh - yup, też tak sądzę.
Tak jak wtedy ten przeciek o żołnierzu...
gonzales Javowcy pozdrawiają dotnetowców xD
kaziks Galaxy S II - u mnie po aktualizacji Firefox działa strasznie zacina się...
Doniek Szkoda że strona z demo nie działa - non stop się przeładowuje
bartez Niech zaczną jeszcze bardziej ograniczać programistów, to zdziwią się ilu...
- Najdmen.pl: Konta www z wyłączonym licznikiem transferu od IONIC.pl (1)
- 2BE.PL: [Oferta] Promocja jak złoto w 2BE.PL (1)
- 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)
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)
#11 Zawiedziony 2012-05-14 12:06:13 0
IP: 80.55.98.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12
#12 Hahaha 2012-05-14 12:18:12 0
IP: 80.55.98.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12