publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
10 skomentuj »

TAGI: aplet , java , kurs , netbeans , programowanie , wątek

2008-07-02 14:05  |  Dorota Trajkowska

Kurs Javy. Praktyczne programowanie, część III

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].

Webhosting.pl

Rysunek 29: Przygotowanie klasy PanelZegar.

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 »

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
10 skomentuj »

Polecamy

Reklama

Komentarze

  • Master Pain

    #1 Master Pain 2008-07-07 11:47:52 0

    :) pięknie. Oby tak dalej.

    None

  • artak

    #2 artak 2008-08-14 13:58:18 0

    Kilka spraw co do kodu.

    1. Nie działa :D (znaczy się na koniec trzeba dodać jeden nawias klamrowy zamykający główną klasę i dodać zmienne: private int kr=255,kg=255,kb=255; o których była mowa stronę wcześniej :) )

    2. Sprawa kosmetyczna, mianowicie:

    public void init() {

    public void paintComponent(Graphics g)

    {

    a dokładniej chodzi mi o położenie nawiasu otwierającego. Trzeba przyjąć jakiś standard (jeden, albo drugi, a nie obydwa na raz :) )

    None

  • Piotr Ch.

    #3 Piotr Ch. 2008-10-06 10:34:45 0

    Świetny kurs, szkoda, że nie ma jeszcze IV części. Ale czekam z niecierpliwością :)

    None

  • Nicnak

    #4 Nicnak 2009-04-22 14:50:42 0

    Z tego co mi wiem 100 milisekund to jedna dziesiąta sekundy a nie sekunda. Poza tym kurs pierwsza klasa! Pozdrawiam

    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

  • krzys

    #5 krzys 2009-05-17 23:34:32 0

    szkoda tylko ze mi to nie działa

    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

  • mistzru

    #6 mistzru 2009-05-31 16:13:42 0

    mi też nie działa

    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

  • rafals

    #7 rafals 2009-08-03 11:52:44 0

    Nie działa, bo między innymi w pliku PAnelZegar brakuje na dole jednej klamry zamykającej.. Nie ma dodanych 3 pól: kr, kg kb w definicji klasy.. ogólnie to nikomu z autorów nie chciało się wkleić tego kodu i przekompilować dla sprawdzenia...

    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

  • majkeluam

    #8 majkeluam 2010-07-15 21:45:16 0

    z błędów kosmetycznych: kreska9 definiuje kreska3 i na odwrót

    grzebałem w wyglądzie tarczy zegara i przypadkiem to odkryłem (:

    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

  • majkeluam

    #9 majkeluam 2010-07-15 22:59:33 1

    ponadto 1sekunda=1000milisekund

    (to odnosnie metody sleep() na 4 stronie kursu)

    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

  • Zbigi

    #10 Zbigi® 2011-03-06 18:45:10 0

    Kurs fajny ale otrzymuje w Netbeans 6.9.1 ostrzeżenie: package Line2D does not exist. Na pewno trzeba go zimportować, ale nie wiem gdzie.

    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)

Uwaga! Możesz zarejestrować się w serwisie i w ten sposób zarezerwować swój nick oraz ominąć konieczność ciągłego odczytywania wyrazów.

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.

Polecane książki

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ł