001 /* PAVLOV -- Multiple Choice Study System 002 * Copyright (C) 2000 - 2004 T.J. Willis 003 * 004 * This program is free software; you can redistribute it and/or 005 * modify it under the terms of the GNU General Public License 006 * as published by the Free Software Foundation; either version 2 007 * of the License, or (at your option) any later version. 008 * 009 * This program is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU General Public License for more details. 013 * 014 * You should have received a copy of the GNU General Public License 015 * along with this program; if not, write to the Free Software 016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. 017 * 018 * $Header: /cvsroot/pavlov/net/sourceforge/pavlov/pluglets/feedback/charts/ChartPanel.java,v 1.3 2004/05/10 15:22:10 tj_willis Exp $ 019 * 020 * 021 * NOTE: This class is an interface between Pavlov and jCharts. 022 * jCharts is a registered trademark of Nathaniel G. Auvil 023 * see: http://jcharts.sourceforge.net 024 * http://sourceforge.net/projects/jcharts 025 * 026 * jCharts includes software developed by the Apache Software Foundation 027 * (http://www.apache.org/), namely the Apache XML Batik Project 028 */ 029 package net.sourceforge.pavlov.pluglets.feedback.charts; 030 import org.jCharts.*; 031 032 import javax.swing.*; 033 import java.awt.*; 034 035 /** 036 * A Swing component to display JCharts that is resizable and repaints 037 * itself as necessary. 038 * 039 * @author <a href="mailto:"></a> 040 * @version 1.0 041 */ 042 public class ChartPanel extends JLabel 043 { 044 private Chart chart; 045 private Graphics2D graf = null; 046 /** 047 * True when the chart's data has changed. 048 * 049 */ 050 protected boolean chartChanged = true; 051 052 /** 053 * Creates a new <code>ChartPanel</code> instance. 054 * 055 */ 056 public ChartPanel( ) 057 { 058 super(); 059 } 060 061 /** 062 * Describe <code>setChart</code> method here. 063 * 064 * @param ac a <code>Chart</code> value 065 */ 066 public void setChart(Chart ac) 067 { 068 chart = ac; 069 chart.setGraphics2D( (Graphics2D) getGraphics() ); 070 chartChanged = true; 071 } 072 073 /** 074 * Delegates to this.paint(Graphics g). 075 * 076 */ 077 public void repaint() {paint(this.getGraphics());} 078 /** 079 * Delegates to this.paint(Graphics2D g). 080 * 081 * @param g a <code>Graphics</code> value 082 */ 083 public void paint(Graphics g){ paint( (Graphics2D)g); } 084 085 /** 086 * Paints this component and rerenders the chart as necessary. 087 * 088 * @param g a <code>Graphics2D</code> value 089 */ 090 public void paint(Graphics2D g) 091 { 092 //super.paintComponents(g); 093 //super.paint(g); 094 if(chart==null) 095 { 096 super.paint(g); 097 return; 098 } 099 try { 100 if(graf==null || graf!=g) 101 { 102 graf = g; 103 chart.setGraphics2D( g ); 104 } 105 chart.render(); 106 chartChanged = false; 107 } catch (Exception e) { 108 e.printStackTrace(); 109 graf=null; 110 chartChanged = true; 111 } 112 } 113 114 }