001 package ca.bc.webarts.tools;
002
003import java.awt.BasicStroke;
004import java.awt.Color;
005import java.awt.image.BufferedImage;
006import java.awt.image.DataBufferByte;
007import java.awt.image.WritableRaster;
008import java.io.Serializable;
009import javax.swing.BorderFactory;
010import java.awt.BorderLayout;
011import java.awt.event.WindowAdapter;
012import java.awt.event.WindowEvent;
013
014import javax.swing.JFrame;
015import javax.swing.JPanel;
016
017import org.jfree.chart.ChartPanel;
018import org.jfree.chart.JFreeChart;
019import org.jfree.chart.plot.DialShape;
020import org.jfree.chart.plot.MeterInterval;
021import org.jfree.chart.plot.MeterPlot;
022import org.jfree.chart.plot.Plot;
023import org.jfree.chart.plot.dial.ArcDialFrame;
024import org.jfree.chart.plot.dial.DialBackground;
025import org.jfree.chart.plot.dial.DialPlot;
026import org.jfree.chart.plot.dial.DialPointer;
027import org.jfree.chart.plot.dial.StandardDialScale;
028import org.jfree.data.general.DefaultValueDataset;
029import org.jfree.data.Range;
030import org.jfree.data.general.ValueDataset;
031
032  public class Speedometer extends JPanel  implements Serializable
033  {
034    private ValueDataset dataset =new DefaultValueDataset(20.0);;
035    private JFreeChart chart;
036    private String title;
037
038  public Speedometer ()
039  {
040    createChart();
041
042    ChartPanel chartPanel = new ChartPanel(chart);
043    chartPanel.setBorder(BorderFactory.createCompoundBorder(
044            BorderFactory.createEmptyBorder(4, 4, 4, 4),
045            BorderFactory.createLineBorder(Color.black)));
046    add(chartPanel);
047
048 }
049
050 public void createChart ()
051{
052   Plot plot = createPlot();
053   chart = new JFreeChart (title, plot);
054   chart.setBackgroundPaint (Color.WHITE);
055}
056
057private MeterPlot createPlot ()
058{
059 MeterPlot plot = new MeterPlot (dataset);
060 plot.setBackgroundAlpha (0.0f);
061 plot.setMeterAngle (180);
062 plot.setDialShape (DialShape.CHORD);
063 plot.setDialBackgroundPaint (Color.white);
064 plot.setTickLabelsVisible (false);
065 plot.setDialOutlinePaint (Color.black);
066 plot.setOutlineStroke (new BasicStroke (6.0f)) ;
067 plot.setNeedlePaint (Color.black);
068 plot.setDrawBorder (false);
069 plot.addInterval (new MeterInterval ( "Good", new Range (0, 55.0), new Color (0,0,0), null, Color.GREEN));
070 plot.addInterval (new MeterInterval ( "Warn", new Range (55, 80.0), new Color (0,0,0), null, Color.YELLOW));
071 plot.addInterval (new MeterInterval ( "Bad ", new Range (80, 100.0), new Color (0,0,0), null, Color.RED));
072 plot.setValuePaint (Color.black);
073 plot.setUnits ("%");
074
075 return plot;
076}
077
078
079public BufferedImage getImage ()
080{
081 createChart ();
082 return chart.createBufferedImage (300, 300);
083}
084
085
086public ValueDataset getDataSet ()
087{
088  return dataset;
089}
090
091
092public void setDataSet (ValueDataset dataset)
093{
094  this.dataset = dataset;
095}
096
097
098public String getTitle ( )
099{
100  return title;
101}
102
103
104public void setTitle (String title)
105{
106  this.title= title;
107}
108
109/**
110* Entry point for the sample application.
111*
112* @param args ignored.
113*/
114public static void main(String[] args)
115{
116  JFrame frame = new JFrame("Speedometer JFreeChart Demo");
117  Speedometer panel = new Speedometer();
118  frame.getContentPane().add(panel, BorderLayout.CENTER);
119  frame.setBounds(200, 120, 600, 280);
120  frame.setVisible(true);
121
122  frame.addWindowListener(new WindowAdapter()
123  {
124    public void windowClosing(WindowEvent e)
125    {
126      System.exit(0);
127    }
128  });
129}
130}