001 /* ====================================================== 002 * Orson : a free chart beans library based on JFreeChart 003 * ====================================================== 004 * 005 * (C) Copyright 2007, by Object Refinery Limited. 006 * 007 * Project Info: not-yet-released 008 * 009 * This library is free software; you can redistribute it and/or modify it 010 * under the terms of the GNU Lesser General Public License as published by 011 * the Free Software Foundation; either version 2.1 of the License, or 012 * (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but 015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 017 * License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this library; if not, write to the Free Software 021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 022 * USA. 023 * 024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 025 * in the United States and other countries.] 026 * 027 */ 028 029 package org.jfree.beans; 030 031 import java.awt.Color; 032 import java.beans.PropertyChangeEvent; 033 034 import org.jfree.chart.ChartFactory; 035 import org.jfree.chart.JFreeChart; 036 import org.jfree.chart.plot.PlotOrientation; 037 import org.jfree.chart.plot.XYPlot; 038 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; 039 import org.jfree.data.xy.XYDataset; 040 import org.jfree.data.xy.XYSeries; 041 import org.jfree.data.xy.XYSeriesCollection; 042 import org.jfree.ui.RectangleInsets; 043 044 /** 045 * A JavaBean that displays a line chart. 046 */ 047 public class JLineChart extends NumericalXYChart { 048 049 /** 050 * Creates a new pie chart bean. 051 */ 052 public JLineChart() { 053 super(); 054 } 055 056 /** 057 * Creates a default chart. 058 * 059 * @return The default chart. 060 */ 061 protected JFreeChart createDefaultChart() { 062 XYSeriesCollection dataset = new XYSeriesCollection(); 063 XYSeries s1 = new XYSeries("Series 1"); 064 s1.add(1.0, 5.0); 065 s1.add(2.0, 7.0); 066 s1.add(3.0, 3.0); 067 s1.add(4.0, 6.0); 068 dataset.addSeries(s1); 069 JFreeChart chart = ChartFactory.createXYLineChart("JLineChart - Title", 070 "X", "Y", dataset, PlotOrientation.VERTICAL, true, true, false); 071 XYPlot plot = (XYPlot) chart.getPlot(); 072 plot.setBackgroundPaint(Color.lightGray); 073 plot.setDomainGridlinePaint(Color.white); 074 plot.setRangeGridlinePaint(Color.white); 075 plot.setAxisOffset(new RectangleInsets(4, 4, 4, 4)); 076 077 XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer(); 078 r.setUseFillPaint(true); 079 r.setBaseFillPaint(Color.white); 080 return chart; 081 } 082 083 /** 084 * Returns the dataset used by the chart. 085 * 086 * @return The dataset (possibly <code>null</code>). 087 * 088 * @see #setDataset(XYDataset) 089 */ 090 public XYDataset getDataset() { 091 XYDataset result = null; 092 XYPlot plot = (XYPlot) this.chart.getPlot(); 093 if (plot != null) { 094 result = plot.getDataset(); 095 } 096 return result; 097 } 098 099 /** 100 * Sets the dataset used by the chart and sends a 101 * {@link PropertyChangeEvent} for the <code>dataset</code> property to all 102 * registered listeners. 103 * 104 * @param dataset the dataset (<code>null</code> permitted). 105 * 106 * @see #getDataset() 107 */ 108 public void setDataset(XYDataset dataset) { 109 XYPlot plot = (XYPlot) this.chart.getPlot(); 110 if (plot != null) { 111 XYDataset old = plot.getDataset(); 112 plot.setDataset(dataset); 113 firePropertyChange("dataset", old, dataset); 114 } 115 } 116 117 /** 118 * Returns <code>true</code> if a shape is drawn to indicate each data 119 * item, and <code>false</code> otherwise. 120 * 121 * @return A boolean. 122 * 123 * @see #setShapesVisible(boolean) 124 */ 125 public boolean getShapesVisible() { 126 XYPlot plot = (XYPlot) this.chart.getPlot(); 127 if (plot == null) { 128 return false; 129 } 130 XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer(); 131 if (r == null) { 132 return false; 133 } 134 return r.getBaseShapesVisible(); 135 } 136 137 /** 138 * Sets a flag that controls whether or not shapes are drawn to highlight 139 * each data item and sends a {@link PropertyChangeEvent} for the 140 * <code>shapesVisible</code> property to all registered listeners. 141 * 142 * @param visible the new flag value. 143 * 144 * @see #getShapesVisible() 145 */ 146 public void setShapesVisible(boolean visible) { 147 XYPlot plot = (XYPlot) this.chart.getPlot(); 148 if (plot == null) { 149 return; 150 } 151 XYLineAndShapeRenderer r = (XYLineAndShapeRenderer) plot.getRenderer(); 152 if (r == null) { 153 return; 154 } 155 boolean old = r.getBaseShapesVisible(); 156 r.setBaseShapesVisible(visible); 157 firePropertyChange("shapesVisible", old, visible); 158 } 159 160 }