|
FanMeter
Die GUI-Komponente FanMeter symbolisiert einen Ventilator, der automatisch animiert werden kann. Dazu implementiert FanMeter das speziell für animierte Komponenten gedachte Interface Animateable . Fügt man ein FanMeter -Objekt einem AnimationContainer hinzu, sorgt dieser automatisch für die Bewegung des FanMeters .
|
Das FanMeter
ist mit einer Dezimalwert-Anzeige versehen und kann zusätzlich eine Beschriftung erhalten. Dazu stehen die in Tabelle 6 aufgelisteten Methoden zur Verfügung. Die Animation des Ventilators erfolgt nur, wenn der angezeigte Wert größer als Null ist.
Methode | Beschreibung |
FanMeter(int x, int y) | Instantiiert einen neuen FanMeter an der angebenen Position. |
animate() | Bewegt die Ventilatorblätter des Ventilators, so dass ein Animationseffekt entsteht. Diese Methode kann zwar durch das Anwendungsprogramm aufgerufen werden, sollte aber im Normalfall einem AnimationContainer überlassen werden. |
setCaption(String caption) | Mit dem Parameter caption kann eine Beschriftung übergeben werden, die rechts von dem Ventilator-Sinnbild dargestellt wird. |
setNumericDisplay(int digits, int decimals, String unit) | Mittels dieser Methode kann die alphanumerische Messwertanzeige konfiguriert werden. Der Parameter digits definiert die Anzahl der anzuzeigenden Stellen. Der Parameter decimals bestimmt, wieviele Nachkommanstellen angezeigt werden sollen (diese sind im Wert von digits enthalten). Beispiel: digits=4 und decimals=3 ergibt die Zahlendarstellung: x,xxx . Im Fall decimals = 0 wird kein Komma eingefügt. Der String unit schließlich gibt die Einheit der Messwerte an (z.B. "V"). |
setValue(int value) | Übergibt einen neuen Messwert an das FanMeter , welches daraufhin aktualisiert wird. |
Tabelle 6: Methoden der Klasse jcontrol.ui.vole.meter.FanMeter
Das im Folgenden gelistete Beispielprogramm demonstriert die Verwendung der GUI-Komponente FanMeter
im Zusammenhang mit einem AnimationContainer
. Letzterer unterscheidet sich nur wenig von einem normalen Container
, erkennt aber automatisch animierbare GUI-Komponenten und erzeugt nach ihrem Hinzufügen einen Prozess, der regelmäßig deren Methode animate
aufruft. Dem Programmierer stellt die Klasse AnimationContainer
zwei zusätzliche Methoden bereit:
Methode | Beschreibung |
setAnimation(boolean animate) | Mit dieser Methode kann die Animation der im AnimationContainer enthaltenen GUI-Komponenten ein- und ausgeschaltet werden. |
setAnimationInterval(int interval) | Stellt die Geschwindigkeit der Animation ein. Der Parameter interval gibt dabei den Zeitraum zwischen zwei Animations-Schritten in Millisekunden an. |
Tabelle 7: Methoden der Klasse jcontrol.ui.vole.AnimationContainer
Abgesehen von den Zusatzfunktionen für animierte GUI-Komponenten verhalten sich AnimationContainer
genau wie normale Container
. Sie können übrigens eine animierbare GUI-Komponente wie den FanMeter
auch einem normalen Container
hinzufügen, dann wird es allerdings nicht animiert. Ebenso können einem AnimationContainer
auch nicht-animierbare GUI-Komponenten hinzugefügt werden.
Laden Sie das VoleFanMeterExample
in Ihre JControl/IDE und starten Sie den Simulator. Dann sollten Sie ein ähnliches Bild wie in Abbildung 6 präsentiert bekommen mit dem Unterschied, dass sich die Ventilatorblätter drehen.
Bild 6: Das VoleFanMeterExample
1 | import jcontrol.lang.Math; |
2 | import jcontrol.lang.ThreadExt; |
3 | import jcontrol.ui.vole.AnimationContainer; |
4 | import jcontrol.ui.vole.Border; |
5 | import jcontrol.ui.vole.Frame; |
6 | import jcontrol.ui.vole.meter.FanMeter; |
7 | |
8 | /** |
9 | * <p>This example demonstrates how to use the |
10 | * component FanMeter within the GUI framework |
11 | * JControl/Vole.</p> |
12 | * |
13 | * <p>(C) DOMOLOGIC Home Automation GmbH 2003-2005</p> |
14 | */ |
15 | public class VoleFanMeterExample extends Frame { |
16 | |
17 | /** |
18 | * Create an animateable Fan and add it to an AnimationContainer |
19 | */ |
20 | public VoleFanMeterExample() { |
21 | // create two Fans |
22 | FanMeter fan1 = new FanMeter(10, 10); |
23 | fan1.setCaption("The 1st Fan"); |
24 | fan1.setNumericDisplay(5,0,"RPM"); |
25 | FanMeter fan2 = new FanMeter(10, 30); |
26 | fan2.setCaption("Another Fan"); |
27 | fan2.setNumericDisplay(5,0,"RPM"); |
28 | |
29 | // create a Border around them |
30 | this.add(new Border("The Fans", 5, 0, 70, 50)); |
31 | |
32 | // create an AnimationContainer and add the Fans |
33 | AnimationContainer ac = new AnimationContainer(); |
34 | ac.add(fan1); |
35 | ac.add(fan2); |
36 | |
37 | // add the AnimationContainer to the Frame |
38 | this.add(ac); |
39 | show(); |
40 | |
41 | // create some random values |
42 | for (;;) { |
43 | fan1.setValue(4800+Math.rnd(500)); |
44 | fan2.setValue(3400+Math.rnd(200)); |
45 | try { |
46 | ThreadExt.sleep(1000); |
47 | } catch (InterruptedException e) {} |
48 | } |
49 | } |
50 | |
51 | /** |
52 | * Instantiate the VoleFanExample |
53 | */ |
54 | public static void main(String[] args) { |
55 | new VoleFanMeterExample(); |
56 | } |
57 | } |
Listing 6: VoleFanMeterExample.java