Thermometer

The Thermometer is especially useful for displaying temperature values. Showing these in form of a mercury thermometer causes an intuitive interpretation as temperature value. Contrary to the AnalogMeter, whereat the displayed value can not be completely understood without reading the String unit.

Besides the standard methods like setValue or setBounds, the Thermometer provides some specific configuration options. Those are listed in table 4.

MethodDescription
Thermometer(int x, int y, int width, int height, int min, int max)Creates a new Thermometer at the given position and of the specified size. The parameters min and max define the range of values.
setCaption(String captionMin, String captionMax)Adds a caption to the Thermometer. The passed Strings will be displayed at the top right (captionMax) and bottom right (captionMin) of this component.
setNumericDisplay(int digits, int decimals, String unit)This method configures the alphanumeric display of measured values. Parameter digits defines the total number of displayed digits, decimals specifies the number of decimals included in digits. Example: digits=4 and decimals=3 will display values in form of x,xxx. If decimals=0, no decimal point will be displayed (useful if the measured value shall be displayed in a different range of values). The parameter unit holds the unit of the displayed values (e.g. "V").
setValue(int value)Passes a new value to the Thermometer, which thereupon will be updated. If value exceeds the range of values, it will be replaced by the according value for min or max.
Table 4: Methods of class jcontrol.ui.vole.meter.Thermometer

The following listing 4 shows the program example VoleThermometerExample. It can be downloaded as the ZIP archive VoleBarMeterExample.zip, which contains the source code along with a JControl/IDE project file. This can be opened in the JControl/IDE and started by using the integrated simulator. Figure 4 shows a screenshot of the running program.

Figure 4: The VoleThermometerExample

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.Thermometer;
8    
9    /**
10     * <p>This example demonstrates how to use the
11     * component Thermometer within the GUI framework
12     * JControl/Vole.</p>
13     *
14     * <p>(C) DOMOLOGIC Home Automation GmbH 2003-2005</p>
15     */
16    public class VoleThermometerExample extends Frame {
17      Thermometer tm1, tm2;
18     
19      /**
20       * Create three AnalogMeters with different configurations.
21       */
22      public VoleThermometerExample() {
23        Container container = new Container();
24        jcontrol.io.Backlight.setBrightness(255);
25       
26        // create the first Thermometer
27        //
28        // NOTE: The String "\u00b0" hereby represents the
29        //       UTF8 version of the 'degree' character
30        tm1 = new Thermometer(8, 10, 50, 45, 0, 400);
31        tm1.setNumericDisplay(5, 1, "\u00b0C")
32        tm1.setCaption("0\u00b0C", "+40\u00b0C");
33    
34        container.add(tm1);
35        container.add(new Label("Inside Temp.", 8, 55, 50, 8,
36                                Label.ALIGN_CENTER));
37     
38        // create the second Thermometer
39        //
40        // NOTE: The String "\u00b0" hereby represents the
41        //       UTF8 version of the 'degree' character
42        tm2 = new Thermometer(68, 10, 50, 45, -300, 500);
43        tm2.setNumericDisplay(5, 1, "\u00b0C");
44        tm2.setCaption("-30\u00b0C", "+50\u00b0C");
45       
46        container.add(tm2);
47        container.add(new Label("Outside Temp.", 68, 55, 50, 8,
48                                Label.ALIGN_CENTER));
49       
50        // add a border
51        container.add(new Border("Thermometers", 0, 0, 128, 64));
52       
53        // add the container to the frame
54        this.add(container);
55       
56        // make us visible
57        show();   
58       
59        // create some random values
60        for (;;) {
61          tm1.setValue(Math.rnd(400));
62          tm2.setValue(Math.rnd(800)-300);
63         
64          try {
65            ThreadExt.sleep(1000);
66          } catch (InterruptedException e) {}
67        }   
68      }
69    
70      // Instantiate and show the VoleAnalogMeterExample
71      public static void main(String[] args) {
72        new VoleThermometerExample();
73      }
74    }
Listing 4: VoleThermometerExample.java

Annotation: The string "\u00b0C" in line 42 represents "°C". The sequence "\u00b0" stands for the hexadecimal UTF-8 version of the character "°". This is used, because some editors modify this character when saving a file and it may thereupon not be displayed correctly anymore.