FanMeter

The GUI componente FanMeter symbolises a fan, that can automatically be animated. For this purpose FanMeter implements a component, which is the interface Animateable and especially intended for animated components. Adding a FanMeter object to an AnimationContainer will cause the FanMeter to be animated automatically.

The FanMeter is equipped with a display for decimal values and may receive an additional caption. Table 6 lists the accordingly available methods. The fans animation only starts, if the displayed value is greater than 0.

MethodDescription
FanMeter(int x, int y)Instantiates a new FanMeter at the specified position.
animate()Animates the fans blades for the impression of a spinning fan. This methode can be invoked by an application, but should normally be left in control of an AnimationContainer.
setCaption(String caption)Provides the FanMeter with a caption, which will be displayed on the rigth side of the fan image.
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. "RPM").
setValue(int value)Passes a new value to the FanMeter, which thereupon will be updated.
Table 6: Methods of class jcontrol.ui.vole.meter.FanMeter

The program example listed below demonstrates the usage of the GUI component FanMeter in connection with an AnimationContainer. Thh latter only differs in few points from a normal Container, automatically recognises animateable GUI componentes and creates a process, which continuously invokes their method animate, after those components are added to the AnimationContainer. The programmer is provided with two additional methods by the class AnimationContainer:

MethodDescription
setAnimation(boolean animate)This method is used to (de)activate the animation of the animateable GUI components, contained in the AnimationContainer.
setAnimationInterval(int interval)Adjusts the speed of the animation. The time span between two steps of animation is givenby interval (in milliseconds).
Table 7: Methods of class jcontrol.ui.vole.AnimationContainer

Besides the additional functions for animated Gui components, the AnimationContainer behaves just like a usual Container. Animateable GUI components like the FanMeter may also be added to a Container, it won't be animated though. Components that are not animateable can likewise be added to an AnimationContainer.

Open the VoleFanMeterExample in your JControl/IDE and start the simulator. You will be presented with an image similarly to the one shown in figure 6, except that the fans are spinning.

Figure 6: The 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