package fr.upd.jby; import java.awt.*; import javax.swing.*; import javax.swing.plaf.*; import javax.accessibility.*; /** * Source code <a href="AquaSpeedometerUI.java.html">here</a>. * @author Jean-Baptiste Yunès * @date 03/2011 */ public class AquaSpeedometerUI extends BasicSpeedometerUI { private static SpeedometerUI speedometerUI; public static ComponentUI createUI(JComponent c) { System.out.println("AquaSpeedometerUI"); if (speedometerUI==null) speedometerUI = new AquaSpeedometerUI(); return speedometerUI; } public AquaSpeedometerUI() { arrowColor = new Color(200,120,120); } public void paint(Graphics og,JComponent co) { Graphics2D g = (Graphics2D)og; Speedometer c = (Speedometer)co; Color b = c.getBackground(); Color f = c.getForeground(); Dimension d = c.getSize(); double w = d.getWidth(); double h = d.getHeight(); double r = 0; if (w>2*h) r = h; else r = w/2; g.setStroke(new BasicStroke(3)); g.setColor(Color.WHITE); g.drawArc((int)(w/2-r),(int)(h-r),(int)(2*r),(int)(2*r),0,180); r -= 4; g.setStroke(new BasicStroke(3)); g.setColor(Color.GRAY); g.drawArc((int)(w/2-r),(int)(h-r),(int)(2*r),(int)(2*r),0,180); g.setColor(Color.GRAY); g.fillArc((int)(w/2-10),(int)(h-10),(int)(2*10),(int)(2*10),0,180); int v = c.getValue(); int m = c.getMinimum(); int M = c.getMaximum(); double fv = 1.0-(double)(v-m)/(double)(M-m); double a = fv*Math.PI; r -= 5; double x = r*Math.cos(a); double y = r*Math.sin(a); g.setStroke(new BasicStroke(5)); g.setColor(arrowColor); g.drawLine((int)(w/2),(int)h,(int)(w/2+x),(int)(h-y)); g.setColor(Color.BLACK); g.drawString(""+v,(int)(w/2)-20,(int)h-20); g.drawString("Aqua",10,20); g.drawString(""+c.getMinimum(),(int)(w/2-r+5),(int)(h-5)); g.drawString(""+c.getMaximum(),(int)(w/2+r-5-20),(int)(h-5)); } }