AnalogMeter

Die GUI-Komponente AnalogMeter stellt ein analoges Zeiger-Messinstrument grafisch dar. Die Größe des Messinstruments ist dabei frei skalierbar, wahlweise können Beschriftungen hinzugefügt werden. Außerdem sind der Öffnungswinkel und die Orientierung der Skala sowie die Anzahl der Teilstriche einstellbar. Tabelle 1 fasst die wichtigsten Methoden von AnalogMeter zusammen:

MethodeBeschreibung
AnalogMeter(int x, int y, int width, int height, int min, int max, int openAngle, int orientation, int dials)Erzeugt ein neues AnalogMeter an den angegebenen Koordinaten. Die Parameter min und max spezifizieren den Wertebereich der Skala, dials gibt die gewünschte Anzahl Teilstriche an. openAngle ist der gewünschte Öffnungswinkel und orientation beschreibt die Ausrichtung des AnalogMeters (mögliche Werte sind ORIENTATION_CENTER, ORIENTATION_LEFT oder ORIENTATION_RIGHT). Bei ORIENTATION_LEFT und ORIENTATION_RIGHT ist der Öffnungswinkel auf 90° begrenzt.
setCaption(String captionMin, String captionMax)Fügt dem AnalogMeter eine Beschriftung hinzu. Die beiden übergebenen Strings werden am Anfang und am Ende der Skala dargestellt.
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. Diese Funktion ist nützlich, wenn die an das AnalogMeter übermittelten Werte z.B. in mV angegeben sind, bei der Visualisierung aber V angezeigt werden sollen. Der String unit schließlich gibt die Einheit der Messwerte an (z.B. "V").
setValue(int value)Übergibt einen neuen Messwert an das AnalogMeter, welches daraufhin aktualisiert wird. Liegt der Wert von value außerhalb des Wertebereichs, so wird er entsprechend durch den minimal, bzw. maximal anzeigbaren Wert ersetzt.
Tabelle 1: Methoden der Klasse jcontrol.ui.vole.meter.AnalogMeter

Das unten gelistete Beispielprogramm VoleAnalogMeterExample demonstriert den Umgang mit dem AnalogMeter und einiger der in Tabelle 1 aufgeführten Methoden. Es ist in dem ZIP-Archiv VoleAnalogMeterExample.zip zusammen mit einem gleichnamigen JControl/IDE-Projekt enthalten. Starten Sie den Simulator, um das Beispielprogramm auszuprobieren.

Bild 1: Das VoleAnalogMeterExample

1    import jcontrol.lang.Math;
2    import jcontrol.lang.ThreadExt;
3    import jcontrol.ui.vole.Border;
4    import jcontrol.ui.vole.Container;
5    import jcontrol.ui.vole.Frame;
6    import jcontrol.ui.vole.Label;
7    import jcontrol.ui.vole.meter.AnalogMeter;
8    
9    /**
10     * <p>This example demonstrates how to use the
11     * component AnalogMeter within the GUI framework
12     * JControl/Vole.</p>
13     *
14     * <p>(C) DOMOLOGIC Home Automation GmbH 2003-2005</p>
15     */
16    public class VoleAnalogMeterExample extends Frame {
17      AnalogMeter am1, am2, am3;
18     
19      /**
20       * Create three AnalogMeters with different configurations.
21       */
22      public VoleAnalogMeterExample() {
23        Container container = new Container();
24        jcontrol.io.Backlight.setBrightness(255);
25        // create the first AnalogMeter
26        am1 = new AnalogMeter(0, 10, 30, 30, 0, 70, 90,
27                              AnalogMeter.ORIENTATION_LEFT, 10);
28        am1.setNumericDisplay(4, 1, null);
29               
30        container.add(am1);
31        container.add(new Label("RPM", 0, 42, 30, 10,
32                                Label.ALIGN_CENTER));
33     
34        // create the second AnalogMeter
35        am2 = new AnalogMeter(35, 10, 58, 30, 0, 120, 180,
36                              AnalogMeter.ORIENTATION_CENTER, 20);
37        am2.setNumericDisplay(4, 1, null);
38       
39        container.add(am2);
40        container.add(new Label("Volt", 35, 42, 58, 10,
41                                Label.ALIGN_CENTER));
42       
43        // create the third AnalogMeter
44        am3 = new AnalogMeter(100, 10, 30, 30, 0, 200, 90,
45                              AnalogMeter.ORIENTATION_RIGHT, 10);
46        am3.setNumericDisplay(4, 2, null);
47       
48        container.add(am3);
49        container.add(new Label("Ampere", 95, 42, 30, 10,
50                                Label.ALIGN_CENTER));
51    
52        // add a border
53        container.add(new Border("AnalogMeters", 0, 0, 128, 51));
54       
55        // add the container to the frame
56        this.add(container);
57       
58        // make us visible
59        show();
60       
61       
62        // create some random values
63        for (;;) {
64          am1.setValue(Math.rnd(70));
65          am2.setValue(Math.rnd(120));
66          am3.setValue(Math.rnd(200));
67         
68          try {
69            ThreadExt.sleep(1000);
70          } catch (InterruptedException e) {}
71        }   
72      }
73    
74      // Instantiate and show the VoleAnalogMeterExample
75      public static void main(String[] args) {
76        new VoleAnalogMeterExample();
77      }
78    }
Listing 1: VoleAnalogMeterExample.java