1
Zakład Techniki Cyfrowej
Języki Programowania
Java Lab 2
1. Tworzenie metody main
• Uruchom BlueJ.
• Utwórz nowy projekt, Wybierz Project -> New Project.
• Wybierz ścieżkę docelową projektu, C:\BlueJ\projekty\.
• Wpisz nazwę projektu, np. DrugiProjekt i utwórz projekt.
• Utwórz nową klasę, np DrugaKlasa.
• Otwórz edytor klasy DrugaKlasa klikając dwa razy na prostokąt symbolizujący
klasę. Skasuj zawartość pliku (CTRL+A, DEL).
• Napisz szkielet klasy DrugaKlasa.
• W ciele klasy utwórz metodę main z modyfikatorami public static, wykorzystaj
klasę System do wyświetlenia napisu, np.
public static void main (String [] args)
{
System.out.println(“Uruchomiono metodę main”);
}
• Metoda main zawsze pobiera argumenty wejściowe w postaci tablicy elementów
typu String (w powyższym przykładzie argumenty mają nazwę args, ale nazwa
jest dowolna). Klasa statyczna taka jak main może być uruchomiona
bezpośrednio z menu pop-up klasy:
• Klasa, która zawiera metodę main to program w języku Java, może być
skompilowany i uruchomiony na komputerze bez użycia BlueJ.
• Wykorzystaj narzędzia pakietu JDK (Java Development Kit). Otwórz wiersz
poleceń (Start->Uruchom->cmd lub WIN+R, a następnie wpisz cmd).
2
• Ustaw ścieżkę dostępu w oknie wiersza poleceń, gdzie znajduje się plik
utworzonej wcześniej klasy. (za pomocą polecenia cd<directoryName>).
• Skompiluj program (javac DrugaKlasa.java). Co jest wynikiem kompilacji pliku
DrugaKlasa.java?
• Uruchom program Java (java DrugaKlasa).
• Metoda main pobiera przy wywołaniu parametry. Zmodyfikuj metodę main w
następujący sposób:
public static void main (String [] args)
{
for(int i = 0; i < args.length; i++)
System.out.println("arg[" + i + "] =" + args[i]);
}
• Wykorzystaj ponownie pakiet JDK firmy Sun. Zamknij projekt DrugiProjekt w
BlueJ. Skompiluj (polecenie javac) i uruchom (polecenie java) w wierszu poleceń
metodę main jeszcze raz, tym razem podaj przy wywołaniu klasy parametry, np;
java DrugaKlasa a to sa parametry dla metody main
2. Proste obliczenia
• Dodaj metodę statyczną (metodę klasy):
public static void dodajDwieLiczbyInt(int i, int j)
{
int k = i+j;
System.out.println(k);
}
Uruchom metodę
dodajDwieLiczbyInt(int i, int j) i sprawdź jej działanie.
• Sprawdź działanie metody dla innych czynników, np. @, &, ‘3’.
• Dodaj metody wykonujące działania „
-, *, /, %”
i przetestuj ich działanie.
• Zmień typy argumentów i przetestuj działanie metody, możesz wykorzystać typy
zmiennoprzecinkowe i całkowitoliczbowe:
Type
# bits
Range
float
32 bits
+/- 1.40239846 *10
-45
to +/- 3.40282347
*10
+38
double
64 bits
+/- 4.94065645841246544 *10
-324
to
+/- 1.79769313486332570*10
+308
3
• Dodaj metodę wykonującą operację arytmetyczną składająca się z dwóch lub
więcej operatorów. Pamiętaj o priorytetach operatorów.
• Pamiętaj o ukrytej konwersji typów przy wykonywaniu operacji dla argumentów
o różnych typach. Wykonaj operację arytmetyczną na argumentach o różnych
typach. W jaki sposób wykonywana jest konwersja typów?
• Korzystając z okna poleceń wykonaj działanie 3.9+7. Jaki jest typ wyniku?
• Przetestuj i porównaj działanie metod:
public static void printCharValues()
{
System.out.println('a');
System.out.println((int) 'a');
System.out.println('a'+1);
System.out.println((char) ('a'+1));
}
public static void printCharValues1()
{
char a_char = 'a';
System.out.println(a_char);
System.out.println((int) a_char);
System.out.println(a_char + 1);
System.out.println((char) (a_char +1));
}
3. Operacje z wartościami boolean
• Dodaj kolejną metodę do klasy DrugaKlasa:
public static void equal(int i, int j) {
boolean b = i == j;
System.out.println(b);
}
Type
# bits
Range
byte
8 bits
-128 to 127
short
16 bits
-32768 to 32767
int
32 bits
-2147483648 to 2147483647
long
64 bits
-9223372036854775808 to
9223372036854775807
4
• Przetestuj metodę equal dla różnych wartości wejściowych i, j. Sprawdź wynik
dla ‘0’ i 48.
• Dodaj, zdefiniuj i przetestuj kolejne metody o sygnaturach:
// prints true if i is greater than j
public static void greaterThan(int i, int j)
// prints true if i is less than j
public static void lessThan(int i, int j)
// prints true if i is different than j
public static void different(int i, int j)
Wykorzystaj operatory porównania: > < >= <= !=
• Wykonaj działania:
o (4 == 2) && (1 < 4)
o !false || (2 >= 8)
o false | false & true
o (4 == 2) == true
o ‘@’ != 6
4. Wyrażenie if, switch, if-else
• Dodaj i zdefiniuj metodę o sygnaturze:
public static void ifNegative_1(int i)
• Metoda wypisuje w terminalu tekst: “The value is negative” jeśli i jest ujemne.
• Skompiluj klasę i przetestuj działanie metody dla różnych wartości i.
5
• Zmień metodę, tak aby wypisywała w oknie terminal oprócz tekstu “The value is
negative” także wartość zmiennej i, tak jak na rysunku:
• Zmień metodę
ifNegative_1 wykorzystując wyrażenie
if-else, tak aby uzyskać
dodatkowo komunikat „The value is positive” dla dodatnich liczb, np.:
• Dodaj i zdefiniuj nową metodę o sygnaturze:
public static void day(int x)
6
• Metoda ma wypisywać nazwę dnia w zależności od wartości parametru x, np.:
“Monday” jeśli x jest równy 1,
“Tuesday” jeśli x jest równy 2,
.
.
.
“Sunday” jeśli x jest równy 7.
Jeśli wartość x jest różna od 1, 2, …7, metoda wypisuje komunikat “The input
parameter value is not acceptable”.
W tym celu można np. wykorzystać następującą konstrukcję:
if (x==1)
{
System.out.println(“Monday”);
}
else if ( … )
{
…
}
else if ( …)
{
…
}
• Przetestuj metodę grade:
public static void grade (int testscore) {
char grade;
if (testscore >= 90) {
grade = '5';
} else if (testscore >= 80) {
grade = '4';
} else if (testscore >= 70) {
grade = '3';
} else grade = '2';
System.out.println("Grade = " + grade);
}
• Wykorzystaj teraz instrukcję
switch
dla realizacji metody day. Przetestuj
metodę.
7
Metoda day może wyglądać następująco:
public static void day(int x)
{
switch(x)
{
case 1: System.out.println("Monday"); break;
case 2: System.out.println("Tuesday"); break;
case 3: …
…
…
default:System.out.println("The input parameter is not acceptable");
}
}
5. Wykorzystanie klasy Math
• Klasa Math zawiera statyczne metody i pola (PI, E) podstawowych operacji
matematycznych.
• Utwórz przykładową metodę wykorzystującą metody z klasy Math:
Math.sqrt(), Math.random()
• Przetestuj działanie metod.
• Sprawdź korzystając z dokumentacji pozostałe metody i pola klasy Math.
6. Tworzenie projektu składającego się z kilku klas
• Stworzysz teraz projekt magazynu elementów elektronicznych.
• Utwórz nowy projekt magazyn w katalogu C:\BlueJ\projekty\.
• Utwórz klasę Element i klasę TestElementu1 w osobnych plikach. Skasuj
zawartość utworzonych przez BlueJ plików. Napisz szkielet klas:
class Element
{
}
public class TestElementu1
{
public static void main(String[] args) {
}
}
• W klasie Element zdefiniuj pola:
• numerElementu typu long
• stanElementu typu long, określa ilość elementów tego typu w
magazynie
• typElementu typu String
• W metodzie main klasy TestElementu1 utwórz dwa obiekty element1 i
element2.
8
• Zainicjuj pola obiektów element1 i element2 przykładowymi wartościami:
• numerElementu = 1;
• stanElementu = 10;
• typElementu = "R 100k 5% 805";
• Sprawdź czy wartości elementów zostały zmodyfikowane, wypisz na ekranie ich
wartości dla utworzonych obiektów. Jak to zrobić?
• W metodzie main dodaj teraz możliwość wprowadzania parametrów elementów
za pomocą klawiatury. Zainicjuj obiekt, np. „inbuf”, który będzie obiektem klasy
BufferedReader. Należy jeszcze przekonwertować strumień wejściowy
(System.in ) tak, żeby można było czytać ze strumienia wejściowego. W tym celu
należy opakować i skonwertować System.in do obiektu typu BufferedReader za
pomocą obiektu klasy InputStreamReader:
BufferedReader inbuf = new BufferedReader(new InputStreamReader(System.in));
• Aby skorzystać z klas BufferedReader należy wcześniej zaimportować
odpowiednie pakiety:
import java.io.*;
• Zdefiniuj teraz zmienną
tekstzklawiatury
do której będzie zapisywany ciąg
znaków z klawiatury (ze strumienia System.in). Po zadeklarowaniu zmiennej
‘
tekstzklawiatury
’ wczytaj do niej dane z klawiatury, np.:
System.out.println("Podaj numer elementu");
String tekstzklawiatury = inbuf.readLine();
System.out.println("Dane wpisane z klawiatury: " + tekstzklawiatury);
• Aby kompilacja się powiodła musisz dodać jeszcze sprawdzenie wyjątków za
pomocą:
try{
}
catch(IOException e){
}
• Sprawdź działanie metody main.
• Aby wpisaną wartość z klawiatury przepisać do pól obiektów element1 i element2
przekształcić typ String zmiennej tekstzklawiatury na Long. Wykorzystaj klasę
Long i metodę Long():
Long tLong = new Long(tekstzklawiatury);
9
• Cały program powinien wyglądać następująco:
import java.io.*;
public class TestElementu1
{
public static void main(String[] args) {
//utworzenie nowych obiektów
Element element1=new Element();
Element element2=new Element();
//inicjalizacja pól obiektów
element1.numerElementu =1;
element1.stanElementu =10;
element1.typElementu = "R 100k 5% 805";
element2.numerElementu =2;
element2.stanElementu =1000;
element2.typElementu = "C 10nF X7R 603";
//wypisanie wartości obiektów
System.out.println("Numer elementu: " + element1.numerElementu);
System.out.println("Liczba elementów: " + element1.stanElementu);
System.out.println("Typ elementu: " + element1.typElementu);
System.out.println("Numer elementu: " + element2.numerElementu);
System.out.println("Liczba elementów: " + element2.stanElementu);
System.out.println("Typ elementu: " + element2.typElementu);
try
{
//inicjujemy obiekt 'inbuf' klasy BufferedReader
BufferedReader inbuf = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Podaj numer elementu");
String tekstzklawiatury = inbuf.readLine();
System.out.println("Dane wpisane z klawiatury:" + tekstzklawiatury);
//utworzenie obiektu typu Long i przypisanie do niego wpisanego tekstu
Long tLong = new Long(tekstzklawiatury);
//przypisanie tLong do składowej klasy Element
element1.numerElementu = tLong.longValue();
}
catch(IOException e)
{
System.out.println("Wystapil wyjatek w czasie czytania z
klawiatury: " + e) ;
}
}
}
10
• Po poprawnej kompilacji diagram projektu wygląda następująco:
• Sprawdź działanie metody main.
• W klasie TestElementu1 utwórz metodę statyczną NowyElement(). Metoda
będzie zwracała obiekt typu Element i zastąpi kod z metody main (cały kod z
metody main zamień na komentarz wykorzystując symbole: /* */). Przykładowy
kod metody NowyElement() może wyglądać następująco:
static Element NowyElement()
{
Element nowyElement = new Element();//utworzenie nowego obiektu
try
{
//inicjujemy obiekt 'inbuf' klasy BufferedReader
BufferedReader inbuf = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Podaj numer elementu:");
String tekstzklawiatury = inbuf.readLine();
//utworzenie obiektu typu Long1 i przypisanie do niego wpisanego
//tekstu
Long tLong1 = new Long(tekstzklawiatury);
System.out.println("Podaj ilość elementów:");
tekstzklawiatury = inbuf.readLine();
Long tLong2 = Long.parseLong(tekstzklawiatury);
nowyElement.numerElementu=tLong1;
nowyElement.stanElementu=tLong2;
}
catch(IOException e)
{
System.out.println("Wystapil wyjatek w czasie czytania z
klawiatury: " + e) ;
}
return nowyElement;
}
• Następnie dodaj metodę static void WypiszElement(Element
elementdowypisania) w klasie TestElementu1, która będzie wypisywała
wartości pól obiektów typu Element. W tym celu usuń z metody main i
zmodyfikuj następujący kod:
System.out.println("Numer elementu: " + element1.numerElementu);
11
System.out.println("Liczba elementów: " + element1.stanElementu);
System.out.println("Typ elementu: " + element1.typElementu);
System.out.println("Numer elementu: " + element2.numerElementu);
System.out.println("Liczba elementów: " + element2.stanElementu);
System.out.println("Typ elementu: " + element2.typElementu);
• Metoda WypiszElement () powinna wyglądać następująco:
static void WypiszElement(Element elementdowypisania)
{
//wypisanie wartości obiektów
System.out.println("Numer elementu: "+ elementdowypisania.numerElementu);
System.out.println("Liczba elementów: "+elementdowypisania.stanElementu);
System.out.println("Typ elementu: " + elementdowypisania.typElementu);
}
• Aby przetestować dodane metody zmodyfikuj metodę main. Usuń zbędny kod i
dodaj fragment tworzący nowe obiekty typu Element za pomocą metody
NowyElement(). Kod metody main powinien wyglądać następująco:
public static void main(String[] arg)
{
Element element1 = NowyElement();
WypiszElement(element1);
Element element2 = NowyElement();
WypiszElement(element2);
}
• Uruchom metodę main.
• Zmień specyfikatory dostępu dla pól numerElementu, stanElementu, typElementu
na private w klasie Element. W ten sposób pola te nie są dostępne w klasie
TestElementu1. Skompiluj klasę TestElementu1, zlokalizuj błąd.
• Aby usunąć błąd trzeba zdefiniować metodę Ustaw() w klasie Element:
public void Ustaw(long numerEl, long stanEl)
{
numerElementu = numerEl;
stanElementu = stanEl;
typElementu = "niezdefiniowany";
}
• Zamień błędny kod z metody NowyElement(), który odwołuje się do pól
prywatnych w klasie Element. Do ustawiania tych pól wykorzystaj metodę
Ustaw(). Skompiluj program.
• Usunięcie kolejnych błędów wymaga modyfikacji metody WypiszElement().
Utwórz nowe metody publiczne w klasie Element:
public long Numer(){
return numerElementu;
}
public long Stan(){
return stanElementu;
}
12
public String Typ(){
return typElementu;
}
• Wykorzystując powyższe metody zmodyfikuj metodę WypiszElement(), np:
System.out.println("Numer elementu: " + elementdowypisania.Numer());
• Skompiluj teraz program i sprawdź działanie metody main i innych metod.
• Wpisywanie kolejnego numeru przy tworzeniu nowych elementów nie ma sensu.
Zmień kod tak, aby numer elementu był tworzony automatycznie.
Dodaj metodę do klasy Element:
private static long NastepnyNumer(){
return (++nastepnyNumer);
}
i zmienną:
private static long nastepnyNumer;
• Zmodyfikuj kod w klasie TestElementu1 (usuń niepotrzebny kod i wykorzystaj
metodę NastepnyNumer), sprawdź działanie programu.
• Do klasy Element dodaj dwie nowe metody DodajElementy() (zwiększenie
liczby elementów danego typu), OdejmijElementy() (zmniejszenie liczby
elementów danego typu). Pamiętaj aby w metodzie OdejmijElementy() dodać
kod sprawdzający czy aktualna liczba elementów jest większa od liczby
odejmowanych elementów. Przetestuj dodane metody.
• Dodaj metodę toString do klasy Element, która wypisze w postaci łańcucha
znaków wszystkie pola obiektu typu Element
public String toString(){
String s = "Element nr: " + this.numerElementu;
s += "\t Typ elementu: " + this.typElementu;
s += "\t Ilość elementów: " + this.stanElementu;
return s;
}
Dzięki tej metodzie będzie można za pomocą konstrukcji
System.out.println
wypisać w jednej linii wszystkie parametry obiektu w metodzie WypiszElement.
Zmodyfikuj metodę WypiszElement i przetestuj modyfikację. Jaki jest cel
zastosowania operatora this?
• Dodaj nową klasę ZapisOperacji (usuń szkielet kodu z pliku klasy), której
zadaniem będzie zapisywanie wszystkich operacji przeprowadzonych w
magazynie.
• Utwórz konstruktor dla klasy ZapisOperacji (w pozostałych klasach używane są
konstruktory domyślne):
class ZapisOperacji {
...
public ZapisOperacji(long iloscelementow){
13
ileelementow = iloscelementow;
kiedy = new Date();
}
...
}
• Dodaj do klasy ZapisOperacji dwa pola prywatne typu final (stałe typu
constans):
private final long ileelementow;
private final Date kiedy;
i dwie metody :
public double IleElementow (){
return ileelementow;
}
public Date Kiedy(){
return kiedy;
}
• Dodaj do klas Element, TestElementu1, ZapisOperacji pakiety:
import java.text.*;
import java.util.*;
• W klasie Element dodaj prywatne pole - kolejkę zdarzeń, do tego pola będą
zapisywane zdarzenia w kontenerze typu LinkedList:
private LinkedList kolejkaoperacji = new LinkedList();
• W celu udostępnienia prywatnej składowej kolejkaoperacji dodaj do klasy
Element metodę, która będzie zwracała referencję do obiektu typu LinkedList:
public LinkedList Operacje(){
return kolejkaoperacji;
}
• W klasie Element zmodyfikuj funkcje DodajElementy i OdejmijElementy tak
aby rejestrowały zmianę liczby elementów. W tym celu dodaj do metod kod:
ZapisOperacji operacja = new ZapisOperacji(liczbanowychel);
kolejkaoperacji.addLast(operacja);
Pamiętaj aby w metodzie OdejmijElementy zapisać liczbę pobranych elementów
ze znakiem ‘-‘.
• Zmodyfikuj metodę WypiszElement tak, aby wyświetlić listę operacji na
elementach:
static void WypiszElement(Element elementdowypisania)
{
System.out.println(elementdowypisania.toString());
14
Collection c = Collections.synchronizedCollection
(elementdowypisania.Operacje());
synchronized(c) {
Iterator i = c.iterator();
while (i.hasNext())
{
ZapisOperacji tNastepna = (ZapisOperacji) i.next();
System.out.println("Data/Czas: " + tNastepna.Kiedy() + "\t" +
tNastepna.IleElementow());
}
}
}
• Przetestuj modyfikacje, zmodyfikuj w tym celu metodę main:
public static void main(String[] args) {
Element element1 = NowyElement();
WypiszElement(element1);
Element element2 = NowyElement();
WypiszElement(element2);
element1.DodajElementy(13);
element1.DodajElementy(30);
element1.OdejmijElementy(3);
element2.OdejmijElementy(5);
WypiszElement(element1);
}
• Zamknij projekt magazyn i przejdź do kolejnego zadania.
7. Aplikacja wykorzystująca myszkę
• Utwórz nowy projekt myszka.
• Utwórz klasę mysz typu applet. Nie kasuj kodu utworzonego przez BlueJ. Dodaj
do klasy mysz bibliotekę event:
import java.awt.event.*;
• Wykorzystanie myszki wymaga implementacji interfejsu którym jest klasa
MouseListener. Wymaga to zdefiniowania pięciu metod:
public void mousePressed (MouseEvent evt)
public void mouseExited (MouseEvent evt)
public void mouseEntered (MouseEvent evt)
public void mouseReleased (MouseEvent evt)
public void mouseClicked (MouseEvent evt)
• Jak myślisz kiedy są wykonywane powyższe metody?
• Metody te jako parametr wejściowy otrzymują referencję do obiektu
MouseEvent. Wykorzystamy metodę mouseClicked(), która jest wywoływana w
momencie naciśnięcia przycisku myszy.
• Ponieważ będziemy implementowali interfejs MouseListener (obsługuje
zdarzenia związane z naciśnięciem klawisza myszy) dodaj następujący kod do
sygnatury klasy mysz:
15
public class mysz extends JApplet implements MouseListener{
…
• Dodaj deklaracje dwóch zmiennych prywatnych typu int x i y do
przechowywania współrzędnych położenia kursora.
• Dodaj do klasy mysz definicje metod:
public void mousePressed (MouseEvent evt){}
public void mouseExited (MouseEvent evt){}
public void mouseEntered (MouseEvent evt){}
public void mouseReleased (MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
• W metodzie init() dodaj kod:
addMouseListener(this);
W ten sposób system jest informowany, że aplet będzie obsługiwał zdarzenia
związane z naciśnięciem klawisza myszy.
• Do metody mouseClicked dodaj kod, który do zmiennych x i y wpisze aktualne
współrzędne kursora po kliknięciu przyciskiem myszy:
x=evt.getX();
y=evt.getY();
repaint();
Metoda repaint() powoduje wywołanie metody paint().
• W metodzie paint() usuń kod wyświetlający tekst i dodaj:
g.drawString(”Współrzędne kliknięcia: x = ”+x+” y = ”+y,10,10);
• Sprawdź działanie apletu.
• Aby usunąć błąd wyświetlania współrzędnej y zmień rozmiary prostokąta w
metodzie fillRect():
g.fillRect(0, 0, 300, 300);
• Dodaj kod wyświetlający oprócz współrzędnych kliknięcia informację którym
przyciskiem kliknięto: lewym czy prawym. Skorzystaj z dokumentacji dla klasy
MouseEvent. Wykorzystaj metodę getButton().
• Zmienisz teraz kod w taki sposób aby współrzędne kursora były widoczne na
bieżąco podczas jego przesuwania.
• Dodaj kolejna implementację do klasy mysz - MouseMotionListener:
public class mysz extends JApplet implements MouseListener,
MouseMotionListener{
…
Interfejs MouseMotionListener może być wykorzystywany jednocześnie z
interfejsem MouseListener.
16
Dodaj definicje dwóch metod:
public void mouseDragged(MouseEvent evt){}
public void mouseMoved(MouseEvent evt){}
Pierwsza metoda jest wywoływana jeśli mysz jest przesuwana z wciśniętym
przyciskiem, druga kiedy mysz jest tylko przesuwana.
• Dodaj do metody mouseMoved() kod który będzie wyświetlał współrzędne
kursora podczas jego przesuwania. Pamiętaj aby w odpowiedniej metodzie dodać
informację dla systemu o wykorzystaniu klasy MouseMotionListener:
addMouseMotionListener(this);
• Dodasz teraz kod rysujący w oknie apletu koła w miejscu kliknięcia myszką.
Usuń kod wyświetlający współrzędne z metody paint().
• Do rysowania kół w metodzie paint() wykorzystaj metodę:
getGraphics().fillOval(x,y,20,20);
• Zmodyfikuj kod w metodzie paint() tak aby można było rysować na całym oknie
apletu.
• Zmodyfikuj kod apletu w taki sposób aby można było swobodnie wykonać
dowolny napis:
17
• Jeszcze jedno małe ćwiczenie. Dodasz do swojego apletu kod zegara.
• Dodaj do klasy mysz pakiety:
import java.text.DateFormat;
import java.util.*;
• Zegar musi zostać odświeżony co 1 s a więc trzeba wykorzystać wątki. Musisz w
tym celu zaimplementować klasę Runnable:
•
public class mysz extends JApplet implements MouseListener,
MouseMotionListener, Runnable{
…
• Dodaj do klasy mysz metodę klasy Runnable:
public void run() {}
• Dodaj deklarację nowego wątku:
private Thread clockThread = null;
• Zainicjalizuj wątek i uruchom go w metodzie start() apletu:
if (clockThread == null) {
clockThread = new Thread(this, "Clock");
clockThread.start();
}
• Jeśli uruchamiasz wątek w metodzie start() to w metodzie stop() musisz dodać
kod zatrzymujący go:
clockThread = null;
• W metodzie run() dodaj kod wywołujący metodę repaint() i „usypiający” wątek
na 1s:
Thread myThread = Thread.currentThread();
while (clockThread == myThread) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e){ }
}
• W metodzie paint() dodaj kod pobierający i wyświetlający czas:
//utwórz obiekt klasy Calendar i przypisz aktualny czas.datę
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
DateFormat dateFormatter = DateFormat.getTimeInstance();
g.drawString(dateFormatter.format(date), 5, 10);
• Aplet nie działa jeszcze prawidłowo:
18
• Kolejne cyfry są zegara nachodzą na siebie. Spróbuj zmodyfikować kod tak aby
usunąć ten błąd.