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}