// Error Values:


// To use error values in a plot, specify multiple columns on the
// PlotVariable(s) used in the plot. The first specified column
// is used for the variable's assigned roll, the second for the
// high errors, and the third for the low errors.

import java.awt.BorderLayout;
import javax.swing.JApplet;
import javax.swing.table.DefaultTableModel;
import com.sas.graphics.components.PlotVariable;
import com.sas.graphics.components.scatterplot.ScatterPlot;
import com.sas.graphics.components.scatterplot.ScatterPlotModel;
import com.sas.graphics.components.scatterplot.ScatterPlotTableDataModel;
import com.sas.graphics.components.NoteModel;

public class ErrorValues extends JApplet {

  public void init() {

  // Create a ScatterPlot and a data model (data defined below)
     ScatterPlotTableDataModel dataModel = null;
     dataModel = new ScatterPlotTableDataModel(new TestData());

  // Create two PlotVariables with error values
     PlotVariable errX = new PlotVariable(
                        "S1"       // column for X role
                       , null      // format
                       , null      // informat
                       , "S1label" // label
                       , "S3"      // highColumnName
                       , "S3label" // highLabel
                       , "S4"      // lowColumnName
                       , "S4label" // lowLabel
                       );

     PlotVariable errY = new PlotVariable(
                        "S2"       // column for Y role
                       , null      // format
                       , null      // informat
                       , "S2label" // label
                       , "S3"      // highColumnName
                       , "S3label" // highLabel
                       , "S4"      // lowColumnName
                       , "S4label" // lowLabel
                       );

     dataModel.setXVariable(errX);
     dataModel.setYVariable(errY);

  // Create a scatter plot and get its model
     ScatterPlot scatterPlot = new ScatterPlot(dataModel);
     ScatterPlotModel graphModel = scatterPlot.getGraphModel();

  // For error lines, use color from the marker styles
     graphModel.setMatchErrorColor(true);

  // Set a graph title
     NoteModel title=scatterPlot.getTitle1();
     title.setText(
              "Use Error Values");

  // Add the ScatterPlot to the Applet's content pane
     getContentPane().add(scatterPlot,BorderLayout.CENTER);
  }

  // Create the data source
     static private class TestData extends DefaultTableModel {

     private static Class  columnClass[]={ Double.class
                                         , Double.class
                                         , Double.class
                                         , Double.class
                                         };
     private static String columnNames[]={ "S1"
                                         , "S2"
                                         , "S3"
                                         , "S4"
                                         };
     public TestData() {
      super();
      Object data[][]={ 
            {new Double( 52),  new Double( 45),  new Double( 13),  new Double( 15)} 
          , {new Double( 52),  new Double(-15),  new Double(  5),  new Double( 25)}
          , {new Double( 38),  new Double(  8),  new Double( 24),  new Double( 12)}
          , {new Double( 77),  new Double(-38),  new Double( 18),  new Double( 11)}
          , {new Double( 34),  new Double( 38),  new Double( 26),  new Double( 19)}
          , {new Double( 92),  new Double(-10),  new Double( 12),  new Double( 33)}
          , {new Double( 60),  new Double( 10),  new Double( 31),  new Double( 17)}
          , {new Double( 29),  new Double( 40),  new Double( 17),  new Double( 28)}

          , {new Double(-35),  new Double( 25),  new Double( 25),  new Double( 25)}
          , {new Double(-10),  new Double(  8),  new Double( 10),  new Double( 10)}
          , {new Double(-15),  new Double(-28),  new Double( 15),  new Double( 15)}
          , {new Double(-20),  new Double(  8),  new Double( 20),  new Double( 20)}
          , {new Double(-25),  new Double( 18),  new Double( 25),  new Double( 25)}
          , {new Double(-30),  new Double(  0),  new Double( 30),  new Double( 30)}
          , {new Double(-35),  new Double(-10),  new Double( 35),  new Double( 35)}

          , {new Double( 55),  new Double(  8),  new Double(-15),  new Double(-15)}
          , {new Double( 30),  new Double( 18),  new Double( 10),  new Double( 10)}
          , {new Double( 15),  new Double( -8),  new Double( 15),  new Double( 15)}
          , {new Double(  0),  new Double( 28),  new Double( 20),  new Double( 20)}
          , {new Double(-15),  new Double(-28),  new Double( 25),  new Double( 25)}
          , {new Double(-30),  new Double( 35),  new Double(-30),  new Double( 30)}
          , {new Double(-35),  new Double( -5),  new Double( 35),  new Double( 35)}
      };
      setDataVector(data, columnNames);
     }
     public Class getColumnClass(int column) {
      return columnClass[column];
     }
   }
}