import java.awt.*;
public class MeterCanvas extends Canvas {
 String title = "Title to Be Supplied";
 int minValue = 0, maxValue = 30, value = 15;
 // Set the title:
 public void setTitle(String s) {       
  title = s;                            
  repaint();                            
 }      
 // Set the current value:
 public void setValue(int v) {          
  value = v;                            
  repaint();                            
 }
 // Paint:
 public void paint(Graphics g) {
  // Obtain Dimension instance and draw:
  Dimension d = size(); 
  int meterWidth = d.width * 3 / 4;
  int dialPosition = meterWidth * (value - minValue) 
                     / (maxValue - minValue);
  int xOrigin = (d.width - meterWidth) / 2; 
  int yOrigin = d.height / 2;
  g.drawLine(xOrigin, yOrigin, xOrigin + meterWidth, yOrigin);
  g.drawLine(xOrigin + dialPosition, yOrigin,
             xOrigin + dialPosition, yOrigin - 10);
  // Write title:
  g.setFont(new Font("Helvetica", Font.BOLD, 12));
  FontMetrics f = g.getFontMetrics();
  int height = f.getHeight();
  int descent = f.getDescent();
  int stringWidth = f.stringWidth(title);
  xOrigin = (d.width - stringWidth) / 2; 
  yOrigin = d.height * 3 / 4;
  g.drawString(title, xOrigin, yOrigin);
 }
 // Assist in sizing:
 public Dimension minimumSize() {return new Dimension(150, 100);}
 public Dimension preferredSize() {return new Dimension(150, 100);}
}
