package jas.hist.test;
import jas.hist.DataSource;
import jas.hist.HasSlices;
import jas.hist.JASHist;
import jas.hist.JASHistData;
import jas.hist.Rebinnable1DHistogramData;
import jas.hist.ScatterPlotSource;
import jas.hist.util.ScatterSliceAdapter;
import jas.hist.util.ScatterTwoDAdapter;
import jas.hist.util.SliceAdapter;
import jas.hist.util.SliceEvent;
import jas.hist.util.SliceListener;
import jas.hist.util.TwoDSliceAdapter;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Hashtable;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
public class SliceTest extends JPanel implements SliceListener
{
SliceTest()
{
super(new BorderLayout());
JPanel p = new JPanel(new GridLayout(1,2));
hist1 = new JASHist();
hist2 = new JASHist();
p.add(hist1);
p.add(hist2);
add(p,BorderLayout.CENTER);
add(new ButtonPanel(),BorderLayout.SOUTH);
}
void setSliceData(Rebinnable1DHistogramData ds)
{
hist2.removeAllData();
if (ds != null) hist2.addData(ds).show(true);
}
void setData(DataSource ds)
{
hist1.removeAllData();
hist2.removeAllData();
hash.clear();
hist1.addData(ds).show(true);
if (ds instanceof SliceAdapter)
{
((SliceAdapter) ds).addSliceListener(this);
}
}
public void sliceAdded(SliceEvent e)
{
HasSlices source = (HasSlices) e.getSource();
DataSource ds = source.getSlice(e.getIndex());
JASHistData data = hist2.addData(ds);
data.show(true);
hash.put(ds,data);
}
public void sliceRemoved(SliceEvent e)
{
HasSlices source = (HasSlices) e.getSource();
DataSource ds = source.getSlice(e.getIndex());
JASHistData data = (JASHistData) hash.get(ds);
data.show(false);
}
public static void main(String[] argv)
{
JFrame f = new JFrame();
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e) {System.exit(0);}
});
f.setContentPane(new SliceTest());
f.pack();
f.show();
}
class ButtonPanel extends JPanel implements ActionListener
{
ButtonPanel()
{
super(new FlowLayout());
addButton(b1 = new JRadioButton("Scatter Plot"));
addButton(b2 = new JRadioButton("Rebinnable 2D Plot"));
addButton(b3 = new JRadioButton("NonRebinnable 2D Plot"));
}
private void addButton(JRadioButton b)
{
add(b);
g.add(b);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
Object b = e.getSource();
if (b == b1)
{
setData(new ScatterSliceAdapter(source));
}
else if (b == b2)
{
setData(new TwoDSliceAdapter(new ScatterTwoDAdapter(source)));
}
else if (b == b3)
{
setData(new TwoDSliceAdapter(new ScatterTwoDAdapter(source)
{
public boolean isRebinnable()
{
return false;
}
}));
}
}
private ButtonGroup g = new ButtonGroup();
private JRadioButton b1, b2, b3;
}
private final ScatterPlotSource source = new TestScatterPlotSource();
private JASHist hist2;
private JASHist hist1;
private Hashtable hash = new Hashtable();
}