Do naszych celów wykorzystamy klasę JLabel (standardowa etykieta tekstowa). Rozszerzymy jej możliwości wyposażając ją w obsługę wątków (zaimplementujemy interfejs Runnable). Nowa etykieta będzie co określoną liczbę milisekund zmieniała swoją treść, czyli będzie wyświetlała aktualny czas. Najprostsza wersja nowej klasy Zegar wygląda tak:
01.
import
java.awt.*;
02.
import
javax.swing.*;
03.
import
java.util.*;
04.
import
java.text.*;
05.
06.
/**
07.
* Prosty zegar w Swingu
08.
* @author kodatnik.blogspot.com
09.
*/
10.
11.
// nowa klasa Zegar zbudowana w oparciu o klasę JLabel
12.
class
Zegar
extends
JLabel
implements
Runnable {
13.
// wątek
14.
private
Thread watek;
15.
// liczba milisekund pauzy (1000 ms czyli 1 sekunda)
16.
private
int
pauza =
1000
;
17.
18.
// konstruktor klasy
19.
public
Zegar() {
20.
// wyrównamy napisy do środka
21.
super
(
""
, SwingConstants.CENTER);
22.
// wybieramy font do wyświetlenia zagara (podajemy nazwę, styl oraz rozmiar)
23.
setFont (
new
Font (
"Consolas"
, Font.BOLD,
28
));
24.
// ustalamy kolor tła
25.
setBackground(Color.BLUE);
26.
// ustalamy kolor tekstu
27.
setForeground(Color.WHITE);
28.
// ustawiamy przeźroczystość
29.
setOpaque(
true
);
30.
}
31.
32.
// metoda start tworzy i uruchamia wątek zegara
33.
public
void
start() {
34.
// jeśli nie ma działającego wątka, utwórz i uruchom nowy
35.
if
(watek ==
null
) {
36.
watek =
new
Thread(
this
);
37.
watek.start();
38.
}
39.
}
40.
41.
// metoda wywołana po starcie wątku
42.
public
void
run() {
43.
// dopóki zmienna watek wskazuje na bieżący wątek
44.
while
( watek == Thread.currentThread()) {
45.
// nowy obiekt klasy Date
46.
Date time =
new
Date();
47.
// formatowanie
48.
DateFormat df = DateFormat.getTimeInstance(DateFormat.MEDIUM);
49.
// ustawiamy tekst
50.
setText(df.format(time));
51.
try
{
52.
// wstrzymujemy działanie wątku na 1 sekundę
53.
watek.sleep(pauza);
54.
}
catch
(InterruptedException e) {}
55.
}
56.
}
57.
58.
// metoda zatrzymująca zegar (wątek)
59.
public
void
stop() {
60.
// ustawiamy referencję watek na null
61.
watek =
null
;
62.
}
63.
}
01.
public
class
PrzykladowyZegar
extends
JFrame {
02.
03.
// konstruktor
04.
public
PrzykladowyZegar() {
05.
// tytuł okna
06.
super
(
"Zegar w Swingu"
);
07.
// rozmiar okna
08.
setSize(
350
,
100
);
09.
// ustawienie domyślnej akcji przy zamykaniu okna
10.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11.
// ustawiamy widoczność okna
12.
setVisible(
true
);
13.
// nie pozwalamy zmieniać rozmiarów okna
14.
setResizable(
false
);
15.
16.
// tworzymy nowy obiekt klasy Zegar
17.
Zegar zegar =
new
Zegar();
18.
// dodajmy go do naszego okna
19.
add(zegar);
20.
21.
// startujemy nasz zegar
22.
zegar.start();
23.
}
24.
25.
public
static
void
main(String [] args) {
26.
// utworzenie obiektu i wywołanie konstruktora
27.
new
PrzykladowyZegar();
28.
}
29.
}
Klasa Zegar, aż prosi się o rozbudowę. Powinniśmy mieć możliwość określenia fontu, kolorów, formatu czy też strefy czasowej podczas tworzenia obiektu. Wystarczy dodać odpowiednie konstruktory i już można będzie wykorzystać kod do tworzenia stoperów czy zegarów wskazujących czas w różnych strefach czasowych.
4 Komentarze - Zegar w Swingu
A może tak analogowy :D/
Dzięki stary uratowałeś moje zaliczenie poprawkowe ;)
Właśnie czegoś takiego szukałem. Super że to opublikowałeś.
niezly blog
Prześlij komentarz
Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)