/* * @(#)DistributionChooser.java 0.0.1 99/08/06 * * Copyright (c) 1999 by Willie Wheeler. All rights reserved. */ package causation.lab; import java.util.*; import javax.swing.*; import stats.*; /** * A JComponent to allow the user to specify a distribution. In * particular, the chooser is designed to provide the user with an easy way * to specify Chart constructor parameters. *
* The DistributionChooser allows the user to set three types of * information: *
* In the sample code that follows, we show how to build a chooser that allows * the user to pick multiple distributions. We place it inside of a * JOptionPane, and then generate a BarChart for each of * the distributions. *
* // Build a chooser and put it in an option pane. * ContingencyTableModel model = tabulator.getDataOut(); * DistributionChooser chooser = new DistributionChooser( * model, DistributionChooser.CONDITIONING_VARIABLES); * int option = JOptionPane.showInternalOptionDialog( * desktopPane, chooser, "Distribution Chooser", * JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, * null, null, null); * * // Store the user-provided distribution specification. * int[] independents = chooser.getSelectedIndependents(); * int dependent = chooser.getSelectedDependent(); * int[][] conditioningStates = chooser.getSelectedConditioningStates(); * * // Return if the user cancels. S/he can do this either by pressing * // 'Cancel' explicitly, or by pressing 'Ok' but not selecting any * // independent variables. * if (option == JOptionPane.CANCEL_OPTION || independents.length == 0) { * return; * } * * // User hasn't cancelled, so let's build the charts. * Vector charts = new Vector(); * for (int i = 0; i < conditioningStates.length; i++) { * charts.add(new BarChart(model, independents, dependent, * conditioningStates[i])); * } ** Supposing that the model's independent variables are Sex, * Hair Color, and Smoker?, the above code produces the * following distribution chooser: *
*
*
* @version 0.0.1 08/06/99
* @author Willie Wheeler
* @see Chart
*/
public class DistributionChooser extends JComponent {
// Chooser types.
/**
* Chooser type associated with choosers that allow the user to specify
* a single conditioning state, and hence a single distribution.
*/
public static final int CONDITIONING_STATE = 0;
/**
* Chooser type associated with choosers that allow the user to specify
* multiple conditioning states, and hence multiple distributions. This
* type is called 'conditioning variables' because the multiple states
* are generated from a user-specifiable set of conditioning variables
* by considering all conditioning states in which the conditioning
* variables have specific values.
*/
public static final int CONDITIONING_VARIABLES = 1;
protected ContingencyTableModel model;
protected int type;
protected int[] selIndepVarIndices;
protected int selDepVarIndex;
protected int[] selCondVarIndices;
protected int[][] selCondStates;
public DistributionChooser(ContingencyTableModel model, int type) {
this.model = model;
this.type = type;
updateUI();
}
public void updateUI() { setUI(UIManager.getUI(this)); }
public String getUIClassID() {
return "causation.lab.plaf.DistributionChooserUI";
}
public ContingencyTableModel getModel() { return model; }
public int getNumIndependents() { return getIndependents().size(); }
public Vector getIndependents() { return model.getIndependents(); }
public int getNumDependents() { return getDependents().size(); }
public Vector getDependents() { return model.getDependents(); }
public int getType() { return type; }
public void setSelectedIndependents(int[] indices) {
this.selIndepVarIndices = indices;
}
public int[] getSelectedIndependents() { return selIndepVarIndices; }
public void setSelectedDependent(int index) {
this.selDepVarIndex = index;
}
public int getSelectedDependent() {
// Had to do this to meet Richard's CDistributionChooserUI specs...
// return selDepVarIndex;
return 0;
}
public void setSelectedConditioningVariables(int[] indices) {
this.selCondVarIndices = indices;
}
public int[] getSelectedConditioningVariables() {
return selCondVarIndices;
}
public void setSelectedConditioningStates(int[][] states) {
this.selCondStates = states;
}
public int[][] getSelectedConditioningStates() { return selCondStates; }
}