Mega Code Archive

 
Categories / Java / Advanced Graphics
 

A rudimentary bar chart class

import java.awt.*; import java.util.*; import javax.swing.*; import no.geosoft.cc.geometry.Geometry; import no.geosoft.cc.graphics.*; /**  * G demo program. Demonstrates:  *  * <ul>  * <li>A rudimentory bar chart class  * <li>Rendering techniques  * </ul>  *   * @author <a href="mailto:jacob.dreyer@geosoft.no">Jacob Dreyer</a>  */    public class Demo17 extends JFrame {   public Demo17()   {     super ("G Graphics Library - Demo 17");         setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);          // Create the graphic canvas     GWindow window = new GWindow();     getContentPane().add (window.getCanvas());          // Create scane with default viewport and world extent settings     GScene scene = new GScene (window);     GStyle chartStyle = new GStyle();     chartStyle.setLineStyle (GStyle.LINESTYLE_INVISIBLE);     chartStyle.setFont (new Font ("Dialog", Font.BOLD, 12));     chartStyle.setForegroundColor (new Color (0, 0, 0));          BarChart barChart = new BarChart (50, 450, 400, 400);     barChart.setStyle (chartStyle);     barChart.addBar ("1998", 250, getColor());     barChart.addBar ("1999", 150, getColor());     barChart.addBar ("2000",  80, getColor());     barChart.addBar ("2001", 174, getColor());     barChart.addBar ("2002", 350, getColor());     barChart.addBar ("2003",  40, getColor());         barChart.addBar ("2004", 100, getColor());     barChart.addBar ("2005", 150, getColor());         scene.add (barChart);          pack();     setSize (new Dimension (500, 500));     setVisible (true);   }      private Color getColor()   {     return new Color (Color.HSBtoRGB ((float)Math.random(), 0.2f, 0.8f));   }           private class BarChart extends GObject   {     private int         x_, y_, width_, height_;     private Collection  bars_;               BarChart (int x, int y, int width, int height)     {       x_      = x;       y_      = y;       width_  = width;       height_ = height;              bars_ = new ArrayList();     }          void addBar (String label, int value, Color color)     {       bars_.add (new Bar (label, value, color));     }               public void draw()     {       final int BAR_WIDTH = 30;       final int SPACING   = 15;       final int DEPTH     = 20;              removeSegments();       int x0 = x_ + 10;       double angle0 = 0.0;       for (Iterator i = bars_.iterator(); i.hasNext(); ) {         Bar bar = (Bar) i.next();         int y0 = y_ - bar.value;                  GSegment main = new GSegment();         addSegment (main);         GStyle style = new GStyle();         style.setForegroundColor (bar.color);         style.setBackgroundColor (bar.color);                 main.setStyle (style);         main.setGeometry (Geometry.createRectangle (x0, y0,                                                     BAR_WIDTH, bar.value));         GSegment label = new GSegment();         addSegment (label);         label.setGeometry (x0 + BAR_WIDTH / 2, y_ + 10);         GText text = new GText (bar.label);         label.setText (text);                  GSegment top = new GSegment();         addSegment (top);         style = new GStyle();         style.setForegroundColor (bar.color.brighter());         style.setBackgroundColor (bar.color.brighter());                 top.setStyle (style);         int topXy[] = {x0, y0,                        x0 + BAR_WIDTH, y0,                        x0 + BAR_WIDTH + DEPTH, y0 - DEPTH,                        x0 + DEPTH, y0 - DEPTH,                        x0, y0};         top.setGeometry (topXy);         GSegment side = new GSegment();         addSegment (side);         style = new GStyle();         style.setForegroundColor (bar.color.darker());         style.setBackgroundColor (bar.color.darker());                 side.setStyle (style);         int[] sideXy = {x0 + BAR_WIDTH, y0,                         x0 + BAR_WIDTH + DEPTH, y0 - DEPTH,                         x0 + BAR_WIDTH + DEPTH, y_ - DEPTH,                         x0 + BAR_WIDTH, y_,                         x0 + BAR_WIDTH, y0};         side.setGeometry (sideXy);                  x0 += BAR_WIDTH + SPACING;       }     }   }      private class Bar   {     public String  label;     public int     value;     public Color   color;     public Bar (String label, int value, Color color)     {       this.label = label;       this.value = value;       this.color = color;     }   }      public static void main (String[] args)   {     new Demo17();   } }                          G-BarChart.zip( 217 k)