package lejos.pc.tools; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.plaf.metal.*; import javax.swing.JComponent; /** * Swing Gauge Component for displaying the value of a NXT sensor. * * @author Lawrie Griffiths * */ public class Gauge extends JComponent { private static final long serialVersionUID = -4319426278542773674L; private int value = 0, maxValue = 1024; private Dimension size; private double gaugeWidth, gaugeHeight; private int centerX, centerY; private double zeroAngle = 225.0; private double maxAngle = -45; private double range = zeroAngle - maxAngle; private double offsetX, offsetY; /** * Create the gauge */ public Gauge() { size = new Dimension(100,100); gaugeWidth = size.width * 0.8; gaugeHeight = size.height * 0.8; offsetX = size.width * 0.1; offsetY = size.width * 0.1; centerX = (int) offsetX + (int)(gaugeWidth/2.0); centerY = (int) offsetY + (int)(gaugeHeight/2.0); setSize(size); setMaximumSize(size); setPreferredSize(size); } /** * Set the value to display * * @param val the new value */ public void setVal( int val ) { value = val; } /** * Set the maximum value for the gauge * * @param max the maximum value */ public void setMaxVal( int max) { maxValue = max; } /** * Paint the gauge. * @param g the Graphics object */ public void paint(Graphics g){ int x1 = centerX, y1 = centerY, x2 = x1, y2 = y1; double angle = zeroAngle - 1.0 * range *( value * 1.0 / maxValue * 1.0); x2 += (int)( Math.cos(Math.toRadians(angle))*(gaugeWidth/2)); y2 -= (int)( Math.sin(Math.toRadians(angle))*(gaugeHeight/2)); g.setColor(MetalLookAndFeel.getPrimaryControlShadow()); g.fillRect(0, 0, size.width, size.height); g.setColor(MetalLookAndFeel.getPrimaryControl()); g.fillOval((int) offsetX, (int) offsetY, (int)gaugeWidth, (int)gaugeHeight); g.setColor( MetalLookAndFeel.getBlack()); g.drawOval((int) offsetX, (int) offsetY, (int)gaugeWidth, (int)gaugeHeight); g.drawArc( (int) offsetX+10, (int) offsetY+10, (int)gaugeWidth-20, (int)gaugeHeight-20, -45, 270); g.setColor(Color.red); g.drawLine(x1, y1, x2, y2 ); g.setColor(Color.black); g.drawString(""+ value, centerX - 10, centerY + 30); } }