sim.util.media.chart.XYChartGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mason Show documentation
Show all versions of mason Show documentation
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