All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sim.util.media.chart.XYChartGenerator Maven / Gradle / Ivy

Go to download

MASON is a fast discrete-event multiagent simulation library core in Java, designed to be the foundation for large custom-purpose Java simulations, and also to provide more than enough functionality for many lightweight simulation needs. MASON contains both a model library and an optional suite of visualization tools in 2D and 3D.

The newest version!
/*
  Copyright 2013 by Sean Luke and George Mason University
  Licensed under the Academic Free License version 3.0
  See the file "LICENSE" for more information
*/

package sim.util.media.chart;

import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import java.io.*;

import java.awt.image.*;

import sim.util.gui.*;
import sim.util.gui.Utilities;
import sim.util.*;
import sim.display.*;
import sim.util.media.*;

// From JFreeChart
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.event.*;
import org.jfree.chart.plot.*;
import org.jfree.data.general.*;
import org.jfree.chart.title.*;
import org.jfree.data.xy.*;

// from iText (www.lowagie.com/iText/)
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

/*  // looks like we'll have to move to these soon
    import com.itextpdf.text.*;
    import com.itextpdf.text.pdf.*;
*/

/**
   An abstract subclass of ChartGenerator for charts which involve X-Y data, such
   as Time Series, Histograms, and Scatter Plots.                
*/

public abstract class XYChartGenerator extends ChartGenerator
    {
    /** The global attributes domain axis field. */
    PropertyField xLabel;
    /** The global attributes range axis field. */
    PropertyField yLabel;
    
    /** The global attributes logarithmic range axis check box. */
    JCheckBox yLog;
    /** The global attributes logarithmic domain axis check box. */
    JCheckBox xLog;
    
    public void setXAxisLogScaled(boolean isLogScaled){xLog.setSelected(isLogScaled);}
    public boolean isXAxisLogScaled(){return xLog.isSelected();}
    public void setYAxisLogScaled(boolean isLogScaled){yLog.setSelected(isLogScaled);}
    public boolean isYAxisLogScaled(){return yLog.isSelected();}
        
    public Dataset getSeriesDataset() { return ((XYPlot)(chart.getPlot())).getDataset(); }
    public void setSeriesDataset(Dataset obj) { ((XYPlot)(chart.getPlot())).setDataset((XYDataset)obj); }





    /** Assumes that the underlying Dataset is an XYDataset.  Override this for other datasets. */
    public int getSeriesCount()
        {
        return ((XYDataset)getSeriesDataset()).getSeriesCount();
        }



    /** @deprecated
        Sets the name of the Range Axis label -- usually this is the Y axis. */
    public void setRangeAxisLabel(String val) { setYAxisLabel(val); }
        
    /** Sets the name of the Y Axis label. */
    public void setYAxisLabel(String val)
        {
        XYPlot xyplot = (XYPlot)(chart.getPlot());
        xyplot.getRangeAxis().setLabel(val);
        xyplot.axisChanged(new AxisChangeEvent(xyplot.getRangeAxis()));
        yLabel.setValue(val);
        }
                
    /** @deprecated
        Returns the name of the Range Axis Label -- usually this is the Y axis. */
    public String getRangeAxisLabel() { return getYAxisLabel(); }
        
    /** Returns the name of the Y Axis label. */
    public String getYAxisLabel()
        {
        return ((XYPlot)(chart.getPlot())).getRangeAxis().getLabel();
        }
                
    /** @deprecated
        Sets the name of the Domain Axis label  -- usually this is the X axis. */
    public void setDomainAxisLabel(String val) { setXAxisLabel(val); }
        
    /** Sets the name of the X Axis label. */
    public void setXAxisLabel(String val)
        {
        XYPlot xyplot = (XYPlot)(chart.getPlot());
        xyplot.getDomainAxis().setLabel(val);
        xyplot.axisChanged(new AxisChangeEvent(xyplot.getDomainAxis()));
        xLabel.setValue(val);
        }
                
    /** @deprecated Returns the name of the Domain Axis label -- usually this is the X axis. */
    public String getDomainAxisLabel() { return getXAxisLabel(); } 

    /** Returns the name of the X Axis label. */
    public String getXAxisLabel()
        {
        return ((XYPlot)(chart.getPlot())).getDomainAxis().getLabel();
        }
    
    /** Returns the underlying chart. **/
    public JFreeChart getChart()
        {
        return chart;
        }

    protected void buildGlobalAttributes(LabelledList list)
        {
        
        // create the chart
        ((XYPlot)(chart.getPlot())).setDomainGridlinesVisible(false);
        ((XYPlot)(chart.getPlot())).setRangeGridlinesVisible(false);
        ((XYPlot)(chart.getPlot())).setDomainGridlinePaint(new Color(200,200,200));
        ((XYPlot)(chart.getPlot())).setRangeGridlinePaint(new Color(200,200,200));

        xLabel = new PropertyField()
            {
            public String newValue(String newValue)
                {
                setXAxisLabel(newValue);
                getChartPanel().repaint();
                return newValue;
                }
            };
        xLabel.setValue(getXAxisLabel());

        list.add(new JLabel("X Label"), xLabel);
        
        yLabel = new PropertyField()
            {
            public String newValue(String newValue)
                {
                setYAxisLabel(newValue);
                getChartPanel().repaint();
                return newValue;
                }
            };
        yLabel.setValue(getYAxisLabel());
        
        list.add(new JLabel("Y Label"), yLabel);
        
        xLog = new JCheckBox();
        xLog.addChangeListener(new ChangeListener(){
            public void stateChanged(ChangeEvent e)
                {
                if(xLog.isSelected())
                    {
                    LogarithmicAxis logAxis = new LogarithmicAxis(xLabel.getValue());
                    logAxis.setStrictValuesFlag(false);
                    chart.getXYPlot().setDomainAxis(logAxis);
                    }
                else
                    chart.getXYPlot().setDomainAxis(new NumberAxis(xLabel.getValue()));
                }
            });

        yLog = new JCheckBox();
        yLog.addChangeListener(new ChangeListener(){
            public void stateChanged(ChangeEvent e)
                {
                if(yLog.isSelected())
                    {
                    LogarithmicAxis logAxis = new LogarithmicAxis(yLabel.getValue());
                    logAxis.setStrictValuesFlag(false);
                    chart.getXYPlot().setRangeAxis(logAxis);
                    }
                else
                    chart.getXYPlot().setRangeAxis(new NumberAxis(yLabel.getValue()));
                }
            });

        Box box = Box.createHorizontalBox();
        box.add(new JLabel("X"));
        box.add(xLog);
        box.add(new JLabel(" Y"));
        box.add(yLog);
        box.add(Box.createGlue());
        list.add(new JLabel("Log Axis"), box);

        final JCheckBox xgridlines = new JCheckBox();
        xgridlines.setSelected(false);
        ItemListener il = new ItemListener()
            {
            public void itemStateChanged(ItemEvent e)
                {
                if (e.getStateChange() == ItemEvent.SELECTED)
                    {
                    chart.getXYPlot().setDomainGridlinesVisible(true);
                    }
                else
                    {
                    chart.getXYPlot().setDomainGridlinesVisible(false);
                    }
                }
            };
        xgridlines.addItemListener(il);

        final JCheckBox ygridlines = new JCheckBox();
        ygridlines.setSelected(false);
        il = new ItemListener()
            {
            public void itemStateChanged(ItemEvent e)
                {
                if (e.getStateChange() == ItemEvent.SELECTED)
                    {
                    chart.getXYPlot().setRangeGridlinesVisible(true);
                    }
                else
                    {
                    chart.getXYPlot().setRangeGridlinesVisible(false);
                    }
                }
            };
        ygridlines.addItemListener(il);


        box = Box.createHorizontalBox();
        box.add(new JLabel("X"));
        box.add(xgridlines);
        box.add(new JLabel(" Y"));
        box.add(ygridlines);
        box.add(Box.createGlue());
        list.add(new JLabel("Grid Lines"), box);
        }
    
    /** @deprecated */
    public void setRangeAxisRange(double lower, double upper) { setYAxisRange(lower, upper); }

    public void setYAxisRange(double lower, double upper)
        {
        XYPlot xyplot = (XYPlot)(chart.getPlot());
        xyplot.getRangeAxis().setRange(lower, upper);
        }
                
    /** @deprecated */
    public void setDomainAxisRange(double lower, double upper) { setXAxisRange(lower, upper); }
        
    public void setXAxisRange(double lower, double upper)
        {
        XYPlot xyplot = (XYPlot)(chart.getPlot());
        xyplot.getDomainAxis().setRange(lower, upper);
        }
    }

        




© 2015 - 2025 Weber Informatics LLC | Privacy Policy