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.

MethodeBeschreibung
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:

MethodeBeschreibung
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