Java lab2

background image

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

background image

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



background image

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

background image

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.

background image

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)

background image

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












background image

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.

background image

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);







background image

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) ;

}
}
}










background image

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);

background image

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;

}

background image

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){

background image

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());

background image

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:

background image

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.

background image

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:

background image

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:

background image

18

• Kolejne cyfry są zegara nachodzą na siebie. Spróbuj zmodyfikować kod tak aby

usunąć ten błąd.


Wyszukiwarka

Podobne podstrony:
Sprawozdanie Java Lab2 Karol Leszczyński gr13
Java Media FreamWork
java 2
I9M1S1 Nawrot Gudanowicz lab2
IWP JP2 Lab2 Struktury
Lab2 OZE id 259328 Nieznany
Projekt java
JAVA tablice
lrm sprawozdanie kck lab2
Inzynieria oprogramowania w ujeciu obiektowym UML wzorce projektowe i Java iowuje
LAB 4 Lab2 WprowadzenieMATLAB 2 Nieznany
Java Przewodnik dla poczatkujacych Wydanie V javpp5
zasady grupy, java, javascript, oprogramowanie biurowe, programowanie, programowanie 2, UTK, systemy
lab2(v2), Semestr III, Technologie wytwarzania
termo lab2 szczotka
Grudziński Krawiec lab2# 10 2012
Badanie wyplywu cieczy ze zbior sprawozdanie z lab2 id 631079 (2)
praktyczny kurs java NX2M5DXARLEHY6NHXOS5FJHKLI6ACRLQQSDRS2Q

więcej podobnych podstron