mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/usc/USCInitDialog.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * Created on Jun 8, 2004
2 26 Feb 07 jari 3  */
2 26 Feb 07 jari 4 package org.tigr.microarray.mev.cluster.gui.impl.usc;
2 26 Feb 07 jari 5
2 26 Feb 07 jari 6 import java.awt.Color;
2 26 Feb 07 jari 7 import java.awt.Dimension;
2 26 Feb 07 jari 8 import java.awt.Frame;
2 26 Feb 07 jari 9 import java.awt.Toolkit;
2 26 Feb 07 jari 10 import java.awt.event.ActionEvent;
2 26 Feb 07 jari 11 import java.awt.event.ActionListener;
2 26 Feb 07 jari 12 import java.awt.event.ItemEvent;
2 26 Feb 07 jari 13 import java.awt.event.ItemListener;
2 26 Feb 07 jari 14 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 15 import java.util.Hashtable;
2 26 Feb 07 jari 16 import java.util.Vector;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import javax.swing.BorderFactory;
2 26 Feb 07 jari 19 import javax.swing.BoxLayout;
2 26 Feb 07 jari 20 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 21 import javax.swing.JButton;
2 26 Feb 07 jari 22 import javax.swing.JFrame;
2 26 Feb 07 jari 23 import javax.swing.JLabel;
2 26 Feb 07 jari 24 import javax.swing.JOptionPane;
2 26 Feb 07 jari 25 import javax.swing.JPanel;
2 26 Feb 07 jari 26 import javax.swing.JRadioButton;
2 26 Feb 07 jari 27 import javax.swing.JSpinner;
2 26 Feb 07 jari 28 import javax.swing.JTextField;
2 26 Feb 07 jari 29 import javax.swing.SpinnerNumberModel;
2 26 Feb 07 jari 30 import javax.swing.SpringLayout;
2 26 Feb 07 jari 31 import javax.swing.event.ChangeEvent;
2 26 Feb 07 jari 32 import javax.swing.event.ChangeListener;
2 26 Feb 07 jari 33
2 26 Feb 07 jari 34 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.AlgorithmDialog;
2 26 Feb 07 jari 35 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 36 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.dialogHelpUtil.HelpWindow;
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38 /**
2 26 Feb 07 jari 39  * This is the first dialog box for the USC analysis.  This should ask the user to choose
2 26 Feb 07 jari 40  * how they'd like to do the analysis.
2 26 Feb 07 jari 41  * 
2 26 Feb 07 jari 42  * @author vu
2 26 Feb 07 jari 43  */
2 26 Feb 07 jari 44 public class USCInitDialog extends AlgorithmDialog {
2 26 Feb 07 jari 45   //Static ints
2 26 Feb 07 jari 46   static int TRAIN_THEN_CLASSIFY = 0;
2 26 Feb 07 jari 47   static int CLASSIFY_FROM_FILE = 1;
2 26 Feb 07 jari 48   
2 26 Feb 07 jari 49   private int result;
2 26 Feb 07 jari 50   
2 26 Feb 07 jari 51   //JRatioButtons to be selected
2 26 Feb 07 jari 52   
2 26 Feb 07 jari 53   private JButton hideAdvance;
2 26 Feb 07 jari 54   private JButton showAdvance;
2 26 Feb 07 jari 55   
2 26 Feb 07 jari 56   private JRadioButton trainPlusClassify;
2 26 Feb 07 jari 57   private JRadioButton classifyFromFile;
2 26 Feb 07 jari 58   private JRadioButton cv;
2 26 Feb 07 jari 59   private JRadioButton loocv;
2 26 Feb 07 jari 60   private JSpinner fold;
2 26 Feb 07 jari 61   private JSpinner delta;
2 26 Feb 07 jari 62   private JSpinner numBins;
2 26 Feb 07 jari 63   private JTextField corrLo;
2 26 Feb 07 jari 64   private JTextField corrHi;
2 26 Feb 07 jari 65   private JTextField corrStep;
2 26 Feb 07 jari 66   
2 26 Feb 07 jari 67   private JSpinner numClass;
2 26 Feb 07 jari 68   private Dimension dSpin;
2 26 Feb 07 jari 69   private Dimension dLabel;
2 26 Feb 07 jari 70   private Dimension dField;
2 26 Feb 07 jari 71   
2 26 Feb 07 jari 72   private Vector vClassField;
2 26 Feb 07 jari 73   private Vector vLabel;
2 26 Feb 07 jari 74   
2 26 Feb 07 jari 75   private Hashtable htField;
2 26 Feb 07 jari 76   private Hashtable htLabel;
2 26 Feb 07 jari 77   
2 26 Feb 07 jari 78   private JPanel centerPanel;
2 26 Feb 07 jari 79   private JPanel requiredPanel;
2 26 Feb 07 jari 80   private JPanel numClassPanel;
2 26 Feb 07 jari 81   private JPanel classFieldPanel;
2 26 Feb 07 jari 82   private JPanel classLabelPanel;
2 26 Feb 07 jari 83   private JPanel advPanel;
2 26 Feb 07 jari 84   private JPanel defaultPanel;
2 26 Feb 07 jari 85   private JPanel borderPanel;
2 26 Feb 07 jari 86   private JPanel buttonPanel;
2 26 Feb 07 jari 87   
2 26 Feb 07 jari 88
2 26 Feb 07 jari 89   /**
2 26 Feb 07 jari 90    * @param parent
2 26 Feb 07 jari 91    */
2 26 Feb 07 jari 92   public USCInitDialog(Frame parent) {
2 26 Feb 07 jari 93     super(new JFrame(), "USC:Uncorrelated Shrunken Centroid Classification", true);
2 26 Feb 07 jari 94     this.setResizable( true );
2 26 Feb 07 jari 95     this.setSize( 550, 450 );
2 26 Feb 07 jari 96     Dimension dButton = new Dimension( 140, 20 );
2 26 Feb 07 jari 97     Dimension dField = new Dimension( 20, 20 );
2 26 Feb 07 jari 98     Dimension dSpin = new Dimension( 100, 20 );
2 26 Feb 07 jari 99     AdvListener al = new AdvListener();
2 26 Feb 07 jari 100     
2 26 Feb 07 jari 101     //Radio button options to find out what user wants to do
2 26 Feb 07 jari 102     this.trainPlusClassify = new JRadioButton("Train then Classify");
2 26 Feb 07 jari 103     this.trainPlusClassify.setSelected(true);
2 26 Feb 07 jari 104     this.classifyFromFile = new JRadioButton("Classify from file");
2 26 Feb 07 jari 105     this.classifyFromFile.setSelected(false);
2 26 Feb 07 jari 106     //group buttons so only 1 is selected at a time
2 26 Feb 07 jari 107     ButtonGroup selectionGroup = new ButtonGroup();
2 26 Feb 07 jari 108     selectionGroup.add(this.trainPlusClassify);
2 26 Feb 07 jari 109     selectionGroup.add(this.classifyFromFile);
2 26 Feb 07 jari 110     //place the radio buttons onto radioPanel and arrange
2 26 Feb 07 jari 111     JPanel radioPanel = new JPanel();
2 26 Feb 07 jari 112     radioPanel.add( this.trainPlusClassify );
2 26 Feb 07 jari 113     radioPanel.add( this.classifyFromFile );
2 26 Feb 07 jari 114     radioPanel.setBorder( BorderFactory.createTitledBorder( "Analysis Mode" ) );
2 26 Feb 07 jari 115     
2 26 Feb 07 jari 116     //numClassPanel to let user tell how many classes there are and their names
2 26 Feb 07 jari 117     SpinnerNumberModel classModel = new SpinnerNumberModel( 2, 1, 100, 1 );
2 26 Feb 07 jari 118     this.numClass = new JSpinner( classModel );
2 26 Feb 07 jari 119     this.numClass.setMaximumSize( dSpin );
2 26 Feb 07 jari 120     this.numClass.addChangeListener( new SpinListener() );
2 26 Feb 07 jari 121     JLabel classLabel = new JLabel( "# of Classes" );
2 26 Feb 07 jari 122     classLabel.setLabelFor( this.numClass );
2 26 Feb 07 jari 123     //place the spinner on a subPanel
2 26 Feb 07 jari 124     this.numClassPanel = new JPanel(  );
2 26 Feb 07 jari 125     this.numClassPanel.setLayout( new SpringLayout() );
2 26 Feb 07 jari 126     this.numClassPanel.setSize( new Dimension( 300, 300 ) );
2 26 Feb 07 jari 127     this.numClassPanel.add( classLabel );
2 26 Feb 07 jari 128     this.numClassPanel.add( this.numClass );
2 26 Feb 07 jari 129     SpringUtilities.makeCompactGrid( this.numClassPanel, 2, 1, 0, 0, 0, 0 );
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     //
2 26 Feb 07 jari 132     this.classLabelPanel = new JPanel();
2 26 Feb 07 jari 133     BoxLayout labelBoxLayout = new BoxLayout( this.classLabelPanel, BoxLayout.Y_AXIS );
2 26 Feb 07 jari 134     this.classLabelPanel.setLayout( labelBoxLayout );
2 26 Feb 07 jari 135     
2 26 Feb 07 jari 136     //create classFieldPanel
2 26 Feb 07 jari 137     this.classFieldPanel = new JPanel();
2 26 Feb 07 jari 138     BoxLayout fieldBoxLayout =  new BoxLayout( this.classFieldPanel, BoxLayout.Y_AXIS );
2 26 Feb 07 jari 139     this.classFieldPanel.setLayout( fieldBoxLayout );
2 26 Feb 07 jari 140     this.vLabel = new Vector();
2 26 Feb 07 jari 141     this.vClassField = new Vector();
2 26 Feb 07 jari 142     this.initClassFields( 2 );
2 26 Feb 07 jari 143     
2 26 Feb 07 jari 144     //add the class stuff to requiredPanel
2 26 Feb 07 jari 145     this.requiredPanel = new JPanel( new SpringLayout() );
2 26 Feb 07 jari 146     this.requiredPanel.add( this.numClassPanel );
2 26 Feb 07 jari 147     this.requiredPanel.add( this.classLabelPanel );
2 26 Feb 07 jari 148     this.requiredPanel.add( this.classFieldPanel );
2 26 Feb 07 jari 149     //this.requiredPanel.setBorder( BorderFactory.createTitledBorder( "Required" ) );
2 26 Feb 07 jari 150     SpringUtilities.makeCompactGrid( this.requiredPanel, 1, 3, 20, 0, 20, 0 );
2 26 Feb 07 jari 151     
2 26 Feb 07 jari 152     //add the radio and spinner panels to radioPanel
2 26 Feb 07 jari 153     this.centerPanel = new JPanel( new SpringLayout() );
2 26 Feb 07 jari 154     this.centerPanel.setBackground( Color.BLACK );
2 26 Feb 07 jari 155     this.centerPanel.add( radioPanel );
2 26 Feb 07 jari 156     this.centerPanel.add( this.requiredPanel );
2 26 Feb 07 jari 157     SpringUtilities.makeCompactGrid( this.centerPanel, 2, 1, 0, 0, 0, 0 );
2 26 Feb 07 jari 158     
2 26 Feb 07 jari 159     //default Panel
2 26 Feb 07 jari 160     this.showAdvance = new JButton( "Advanced Options" );
2 26 Feb 07 jari 161     this.showAdvance.setMaximumSize( dButton );
2 26 Feb 07 jari 162     this.showAdvance.addActionListener( al );
2 26 Feb 07 jari 163     this.defaultPanel = new JPanel();
2 26 Feb 07 jari 164     this.defaultPanel.add( this.showAdvance );
2 26 Feb 07 jari 165     
2 26 Feb 07 jari 166     //advanced Panel
2 26 Feb 07 jari 167     this.hideAdvance = new JButton( "Hide Advanced" );
2 26 Feb 07 jari 168     this.hideAdvance.setMaximumSize( dButton );
2 26 Feb 07 jari 169     this.hideAdvance.addActionListener( al );
2 26 Feb 07 jari 170     this.buttonPanel = new JPanel();
2 26 Feb 07 jari 171     this.buttonPanel.add( this.hideAdvance );
2 26 Feb 07 jari 172     
2 26 Feb 07 jari 173     //advanced params
2 26 Feb 07 jari 174     this.cv = new JRadioButton( "Standard" );
2 26 Feb 07 jari 175     this.cv.setSelected( true );
2 26 Feb 07 jari 176     this.loocv = new JRadioButton( "LOOCV" );
2 26 Feb 07 jari 177     this.loocv.setSelected( false );
2 26 Feb 07 jari 178     //group as mutually exclusive
2 26 Feb 07 jari 179     ButtonGroup xValidationGroup = new ButtonGroup();
2 26 Feb 07 jari 180     xValidationGroup.add( this.cv );
2 26 Feb 07 jari 181     xValidationGroup.add( this.loocv );
2 26 Feb 07 jari 182     //place the radio buttons onto a panel
2 26 Feb 07 jari 183     JPanel paramSub = new JPanel();
2 26 Feb 07 jari 184     paramSub.setBorder( BorderFactory.createTitledBorder( "X Validation Algorithm" ) );
2 26 Feb 07 jari 185     paramSub.setLayout( new BoxLayout( paramSub, BoxLayout.Y_AXIS ) );
2 26 Feb 07 jari 186     paramSub.add( this.cv );
2 26 Feb 07 jari 187     paramSub.add( this.loocv );
2 26 Feb 07 jari 188     SpinnerNumberModel foldModel = new SpinnerNumberModel( 5, 1, 50, 1 );
2 26 Feb 07 jari 189     SpinnerNumberModel binModel = new SpinnerNumberModel( 50, 1, 200, 1 );
2 26 Feb 07 jari 190     SpinnerNumberModel deltaModel = new SpinnerNumberModel( 20, 1, 200, 1 );
2 26 Feb 07 jari 191     this.fold = new JSpinner( foldModel );
2 26 Feb 07 jari 192     this.fold.setMaximumSize( dSpin );
2 26 Feb 07 jari 193     this.numBins = new JSpinner( binModel );
2 26 Feb 07 jari 194     this.numBins.setMaximumSize( dSpin );
2 26 Feb 07 jari 195     this.delta = new JSpinner( deltaModel );
2 26 Feb 07 jari 196     this.delta.setMaximumSize( dSpin );
2 26 Feb 07 jari 197     this.corrLo = new JTextField( "0" );
2 26 Feb 07 jari 198     this.corrLo.setMaximumSize( dSpin );
2 26 Feb 07 jari 199     this.corrHi = new JTextField( "1.0" );
2 26 Feb 07 jari 200     this.corrHi.setMaximumSize( dSpin );
2 26 Feb 07 jari 201     this.corrStep = new JTextField( "0.1" );
2 26 Feb 07 jari 202     this.corrStep.setMaximumSize( dSpin );
2 26 Feb 07 jari 203     JLabel foldLabel = new JLabel( "Numbaaaaer of Folds" );
2 26 Feb 07 jari 204     JLabel binLabel = new JLabel( "# of Bins" );
2 26 Feb 07 jari 205     JLabel deltaLabel = new JLabel( "Delta High" );
2 26 Feb 07 jari 206     JLabel corrLoLabel = new JLabel( "Corr Low" );
2 26 Feb 07 jari 207     JLabel corrHiLabel = new JLabel( "Corr High" );
2 26 Feb 07 jari 208     JLabel corrStepLabel = new JLabel( "Corr Step" );
2 26 Feb 07 jari 209     foldLabel.setLabelFor( this.fold );
2 26 Feb 07 jari 210     corrLoLabel.setLabelFor( this.corrLo );
2 26 Feb 07 jari 211     corrHiLabel.setLabelFor( this.corrHi );
2 26 Feb 07 jari 212     corrStepLabel.setLabelFor( this.corrStep );
2 26 Feb 07 jari 213     JPanel fieldPanel = new JPanel();
2 26 Feb 07 jari 214     fieldPanel.setLayout( new SpringLayout() );
2 26 Feb 07 jari 215     fieldPanel.setBorder( BorderFactory.createTitledBorder( "Validation Parameters" ) );
2 26 Feb 07 jari 216     fieldPanel.add( foldLabel );
2 26 Feb 07 jari 217     fieldPanel.add( this.fold );
2 26 Feb 07 jari 218     fieldPanel.add( binLabel );
2 26 Feb 07 jari 219     fieldPanel.add( this.numBins );
2 26 Feb 07 jari 220     fieldPanel.add( deltaLabel );
2 26 Feb 07 jari 221     fieldPanel.add( this.delta );
2 26 Feb 07 jari 222     fieldPanel.add( corrLoLabel );
2 26 Feb 07 jari 223     fieldPanel.add( this.corrLo );
2 26 Feb 07 jari 224     fieldPanel.add( corrHiLabel );
2 26 Feb 07 jari 225     fieldPanel.add( this.corrHi );
2 26 Feb 07 jari 226     fieldPanel.add( corrStepLabel );
2 26 Feb 07 jari 227     fieldPanel.add( this.corrStep );
2 26 Feb 07 jari 228     SpringUtilities.makeCompactGrid( fieldPanel, 6, 2, 0, 0, 5, 0 );
2 26 Feb 07 jari 229     
2 26 Feb 07 jari 230     this.advPanel = new JPanel();
2 26 Feb 07 jari 231     this.advPanel.setLayout( new SpringLayout() );
2 26 Feb 07 jari 232     this.advPanel.add( this.hideAdvance );
2 26 Feb 07 jari 233     this.advPanel.add( paramSub );
2 26 Feb 07 jari 234     this.advPanel.add( fieldPanel );
2 26 Feb 07 jari 235     SpringUtilities.makeCompactGrid( this.advPanel, 3, 1, 155, 0, 155, 0 );
2 26 Feb 07 jari 236     
2 26 Feb 07 jari 237     //listen for actions
2 26 Feb 07 jari 238     Listener listener = new Listener();
2 26 Feb 07 jari 239     super.addWindowListener(listener);
2 26 Feb 07 jari 240     super.setActionListeners(listener);
2 26 Feb 07 jari 241     /*
2 26 Feb 07 jari 242     //finally, display it
2 26 Feb 07 jari 243     this.borderPanel = new JPanel();
2 26 Feb 07 jari 244     this.borderPanel.setLayout( new BorderLayout() );
2 26 Feb 07 jari 245     this.borderPanel.add( this.centerPanel, BorderLayout.CENTER );
2 26 Feb 07 jari 246     this.borderPanel.add( this.defaultPanel, BorderLayout.SOUTH );
2 26 Feb 07 jari 247     this.addContent( this.borderPanel );
2 26 Feb 07 jari 248     */
2 26 Feb 07 jari 249     this.borderPanel = new JPanel();
2 26 Feb 07 jari 250     this.borderPanel.setLayout( new SpringLayout() );
2 26 Feb 07 jari 251     this.borderPanel.add( this.centerPanel );
2 26 Feb 07 jari 252     this.borderPanel.add( this.defaultPanel );
2 26 Feb 07 jari 253     SpringUtilities.makeCompactGrid( this.borderPanel, 2, 1, 0, 0, 0, 0 );
2 26 Feb 07 jari 254     this.addContent( this.borderPanel );
2 26 Feb 07 jari 255   }//end constructor
2 26 Feb 07 jari 256   
2 26 Feb 07 jari 257   
2 26 Feb 07 jari 258   private void classList() {
2 26 Feb 07 jari 259     SpinnerNumberModel model = ( SpinnerNumberModel ) this.numClass.getModel();
2 26 Feb 07 jari 260     int i = model.getNumber().intValue();
2 26 Feb 07 jari 261     
2 26 Feb 07 jari 262     if( i < this.vClassField.size() ) {
2 26 Feb 07 jari 263       this.removeClassFields( this.vClassField.size() - i );
2 26 Feb 07 jari 264     } else if( i > this.vClassField.size() ) {
2 26 Feb 07 jari 265       this.addClassFields( i - this.vClassField.size() );
2 26 Feb 07 jari 266     } else {
2 26 Feb 07 jari 267       //do nothing
2 26 Feb 07 jari 268     }
2 26 Feb 07 jari 269   }//end classList()
2 26 Feb 07 jari 270   
2 26 Feb 07 jari 271   
2 26 Feb 07 jari 272   private void initClassFields( int numToAdd ) {
2 26 Feb 07 jari 273     int iField = this.vClassField.size();
2 26 Feb 07 jari 274     
2 26 Feb 07 jari 275     for( int i = 0; i < numToAdd; i ++ ) {
2 26 Feb 07 jari 276       JLabel label = new JLabel( "Class " + ( ( iField + 1 ) + i ) + " Label:" );
2 26 Feb 07 jari 277       label.setMaximumSize( this.dField );
2 26 Feb 07 jari 278       label.setMinimumSize( this.dField );
2 26 Feb 07 jari 279       label.setPreferredSize( this.dField );
2 26 Feb 07 jari 280       
2 26 Feb 07 jari 281       JTextField field = new JTextField( "" );
2 26 Feb 07 jari 282       field.setMaximumSize( this.dField );
2 26 Feb 07 jari 283       field.setMinimumSize( this.dField );
2 26 Feb 07 jari 284       field.setPreferredSize( this.dField );
2 26 Feb 07 jari 285       
2 26 Feb 07 jari 286       label.setLabelFor( field );
2 26 Feb 07 jari 287       
2 26 Feb 07 jari 288       //this.classLabelPanel.add( label );
2 26 Feb 07 jari 289       //this.vLabel.add( label );
2 26 Feb 07 jari 290       this.classFieldPanel.add( field );
2 26 Feb 07 jari 291       this.vClassField.add( field );
2 26 Feb 07 jari 292     }
2 26 Feb 07 jari 293     
2 26 Feb 07 jari 294     this.getRootPane().revalidate();
2 26 Feb 07 jari 295     
2 26 Feb 07 jari 296     //SpringUtilities.makeCompactGrid( this.classFieldPanel, numToAdd, 2, 0, 0, 0, 0 );
2 26 Feb 07 jari 297   }//end addClassFields()
2 26 Feb 07 jari 298   
2 26 Feb 07 jari 299   
2 26 Feb 07 jari 300   private void addClassFields( int numToAdd ) {
2 26 Feb 07 jari 301     int iField = this.vClassField.size();
2 26 Feb 07 jari 302     
2 26 Feb 07 jari 303     for( int i = 0; i < numToAdd; i ++ ) {
2 26 Feb 07 jari 304       JLabel label = new JLabel( "Class " + ( ( iField + 1 ) + i ) + " Label:" );
2 26 Feb 07 jari 305       label.setMaximumSize( this.dField );
2 26 Feb 07 jari 306       label.setMinimumSize( this.dField );
2 26 Feb 07 jari 307       label.setPreferredSize( this.dField );
2 26 Feb 07 jari 308       
2 26 Feb 07 jari 309       JTextField field = new JTextField( "" );
2 26 Feb 07 jari 310       field.setMaximumSize( this.dField );
2 26 Feb 07 jari 311       field.setMinimumSize( this.dField );
2 26 Feb 07 jari 312       field.setPreferredSize( this.dField );
2 26 Feb 07 jari 313       
2 26 Feb 07 jari 314       label.setLabelFor( field );
2 26 Feb 07 jari 315       
2 26 Feb 07 jari 316       //this.classLabelPanel.add( label );
2 26 Feb 07 jari 317       //this.vLabel.add( label );
2 26 Feb 07 jari 318       this.classFieldPanel.add( field );
2 26 Feb 07 jari 319       this.vClassField.add( field );
2 26 Feb 07 jari 320     }
2 26 Feb 07 jari 321
2 26 Feb 07 jari 322     this.requiredPanel.repaint();
2 26 Feb 07 jari 323     //this.classFieldPanel.repaint();
2 26 Feb 07 jari 324     this.getRootPane().revalidate();
2 26 Feb 07 jari 325     //pack();
2 26 Feb 07 jari 326     
2 26 Feb 07 jari 327     //SpringUtilities.makeCompactGrid( this.classFieldPanel, numToAdd, 2, 0, 0, 0, 0 );
2 26 Feb 07 jari 328
2 26 Feb 07 jari 329     //this.refreshClassFields();
2 26 Feb 07 jari 330   }//end addClassFields()
2 26 Feb 07 jari 331   
2 26 Feb 07 jari 332   
2 26 Feb 07 jari 333   private void removeClassFields( int numToRemove ) {
2 26 Feb 07 jari 334     System.out.println( "removeClassFields() called" );
2 26 Feb 07 jari 335     
2 26 Feb 07 jari 336     for( int i = 0; i < numToRemove; i ++ ) {
2 26 Feb 07 jari 337       int iField = this.vClassField.size() - ( i + 1 );
2 26 Feb 07 jari 338       JTextField field = ( JTextField ) this.vClassField.elementAt( iField );
2 26 Feb 07 jari 339       this.classFieldPanel.remove( field );
2 26 Feb 07 jari 340       this.vClassField.remove( iField );
2 26 Feb 07 jari 341       
2 26 Feb 07 jari 342       //JLabel label = ( JLabel ) this.vLabel.elementAt( iField );
2 26 Feb 07 jari 343       //this.classLabelPanel.remove( label );
2 26 Feb 07 jari 344       //this.vLabel.remove( iField );
2 26 Feb 07 jari 345     }
2 26 Feb 07 jari 346
2 26 Feb 07 jari 347     this.requiredPanel.repaint();
2 26 Feb 07 jari 348     //this.classFieldPanel.repaint();
2 26 Feb 07 jari 349     this.getRootPane().revalidate();
2 26 Feb 07 jari 350     //pack();
2 26 Feb 07 jari 351     //this.refreshClassFields();
2 26 Feb 07 jari 352   }
2 26 Feb 07 jari 353   
2 26 Feb 07 jari 354   
2 26 Feb 07 jari 355   private void onShowAdvanced() {
2 26 Feb 07 jari 356     this.borderPanel.remove( this.defaultPanel );
2 26 Feb 07 jari 357     this.borderPanel.add( this.advPanel );
2 26 Feb 07 jari 358     
2 26 Feb 07 jari 359     this.getRootPane().revalidate();
2 26 Feb 07 jari 360     pack();
2 26 Feb 07 jari 361   }//end onAdvanced()
2 26 Feb 07 jari 362   
2 26 Feb 07 jari 363   
2 26 Feb 07 jari 364   private void onHideAdvanced() {
2 26 Feb 07 jari 365     this.getFold();
2 26 Feb 07 jari 366     
2 26 Feb 07 jari 367     this.borderPanel.remove( this.advPanel );
2 26 Feb 07 jari 368     this.borderPanel.add( this.defaultPanel );
2 26 Feb 07 jari 369     
2 26 Feb 07 jari 370     this.getRootPane().revalidate();
2 26 Feb 07 jari 371     pack();
2 26 Feb 07 jari 372   }
2 26 Feb 07 jari 373   
2 26 Feb 07 jari 374   
2 26 Feb 07 jari 375   public int getSelectedAction() {
2 26 Feb 07 jari 376     if(this.trainPlusClassify.isSelected() == true) {
2 26 Feb 07 jari 377       return USCInitDialog.TRAIN_THEN_CLASSIFY;
2 26 Feb 07 jari 378     } else {
2 26 Feb 07 jari 379       return USCInitDialog.CLASSIFY_FROM_FILE;
2 26 Feb 07 jari 380     }
2 26 Feb 07 jari 381   }//end getSelectedAction()
2 26 Feb 07 jari 382   
2 26 Feb 07 jari 383     
2 26 Feb 07 jari 384   /**
2 26 Feb 07 jari 385    * Shows the dialog.
2 26 Feb 07 jari 386    */
2 26 Feb 07 jari 387   public int showModal() {
2 26 Feb 07 jari 388     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 389     setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 390     show();
2 26 Feb 07 jari 391     return result;
2 26 Feb 07 jari 392   }//end showModal()
2 26 Feb 07 jari 393   
2 26 Feb 07 jari 394   
2 26 Feb 07 jari 395   public void error( String message ) {
2 26 Feb 07 jari 396     JOptionPane.showMessageDialog( this, message, "Input Error", JOptionPane.ERROR_MESSAGE );
2 26 Feb 07 jari 397   }//end error()
2 26 Feb 07 jari 398   
2 26 Feb 07 jari 399   
2 26 Feb 07 jari 400   private class AdvListener implements ActionListener {
2 26 Feb 07 jari 401     public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 402       Object source = e.getSource();
2 26 Feb 07 jari 403       
2 26 Feb 07 jari 404       System.out.println( source.toString() );
2 26 Feb 07 jari 405       
2 26 Feb 07 jari 406       if( source == showAdvance ) {
2 26 Feb 07 jari 407         onShowAdvanced();
2 26 Feb 07 jari 408       } else if( source == hideAdvance ) {
2 26 Feb 07 jari 409         onHideAdvanced();
2 26 Feb 07 jari 410       }
2 26 Feb 07 jari 411     }//end actionPerformed()
2 26 Feb 07 jari 412   }//end class
2 26 Feb 07 jari 413   
2 26 Feb 07 jari 414   
2 26 Feb 07 jari 415   private class SpinListener implements ChangeListener {
2 26 Feb 07 jari 416     public void stateChanged(ChangeEvent e) {
2 26 Feb 07 jari 417       classList();
2 26 Feb 07 jari 418     }
2 26 Feb 07 jari 419   }//end class
2 26 Feb 07 jari 420   
2 26 Feb 07 jari 421     
2 26 Feb 07 jari 422   /**
2 26 Feb 07 jari 423    * The class to listen to the dialog and check boxes items events.
2 26 Feb 07 jari 424    */
2 26 Feb 07 jari 425   private class Listener extends DialogListener implements ItemListener {
2 26 Feb 07 jari 426         
2 26 Feb 07 jari 427     public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 428       String command = e.getActionCommand();
2 26 Feb 07 jari 429       if (command.equals("ok-command")) {
2 26 Feb 07 jari 430         //if( validateFields() ) {
2 26 Feb 07 jari 431           result = JOptionPane.OK_OPTION;
2 26 Feb 07 jari 432           dispose();
2 26 Feb 07 jari 433         //} else {
2 26 Feb 07 jari 434           //do nothing
2 26 Feb 07 jari 435         //}
2 26 Feb 07 jari 436       } else if (command.equals("cancel-command")) {
2 26 Feb 07 jari 437         result = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 438         dispose();
2 26 Feb 07 jari 439       } else if (command.equals("reset-command")) {
2 26 Feb 07 jari 440         //resetControls();
2 26 Feb 07 jari 441         result = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 442         return;
2 26 Feb 07 jari 443       } else if (command.equals("info-command")) {
2 26 Feb 07 jari 444         HelpWindow hw = new HelpWindow(USCInitDialog.this, "USC Initialization Dialog");
2 26 Feb 07 jari 445         result = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 446         if(hw.getWindowContent()){
2 26 Feb 07 jari 447           hw.setSize(450,600);
2 26 Feb 07 jari 448           hw.setLocation();
2 26 Feb 07 jari 449           hw.show();
2 26 Feb 07 jari 450           return;
2 26 Feb 07 jari 451         } else {
2 26 Feb 07 jari 452           hw.setVisible(false);
2 26 Feb 07 jari 453           hw.dispose();
2 26 Feb 07 jari 454           return;
2 26 Feb 07 jari 455         }
2 26 Feb 07 jari 456       }
2 26 Feb 07 jari 457       //dispose();
2 26 Feb 07 jari 458     }//end actionPerformed()
2 26 Feb 07 jari 459         
2 26 Feb 07 jari 460     public void itemStateChanged(ItemEvent e) {
2 26 Feb 07 jari 461       //okButton.setEnabled(genes_box.isSelected() || cluster_box.isSelected());
2 26 Feb 07 jari 462     }
2 26 Feb 07 jari 463         
2 26 Feb 07 jari 464     public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 465       result = JOptionPane.CLOSED_OPTION;
2 26 Feb 07 jari 466       dispose();
2 26 Feb 07 jari 467     }
2 26 Feb 07 jari 468   }//end internal Listener class
2 26 Feb 07 jari 469   
2 26 Feb 07 jari 470   //test harness
2 26 Feb 07 jari 471   public static void main(String [] args) {
2 26 Feb 07 jari 472     System.out.println( "invoked by main" );
2 26 Feb 07 jari 473     
2 26 Feb 07 jari 474     USCInitDialog uid = new USCInitDialog(new javax.swing.JFrame("Test"));
2 26 Feb 07 jari 475     uid.showModal();
2 26 Feb 07 jari 476   }//end main
2 26 Feb 07 jari 477   
2 26 Feb 07 jari 478   
2 26 Feb 07 jari 479   public int getNumClasses() {
2 26 Feb 07 jari 480     SpinnerNumberModel model = ( SpinnerNumberModel ) this.numClass.getModel();
2 26 Feb 07 jari 481     Number N = model.getNumber();
2 26 Feb 07 jari 482     return N.intValue();
2 26 Feb 07 jari 483   }
2 26 Feb 07 jari 484   public double getCorrLo() {
2 26 Feb 07 jari 485     String sCorr = this.corrLo.getText();
2 26 Feb 07 jari 486     Double DCorr = new Double( sCorr );
2 26 Feb 07 jari 487     return DCorr.doubleValue();
2 26 Feb 07 jari 488   }
2 26 Feb 07 jari 489   public double getCorrHi() {
2 26 Feb 07 jari 490     String sCorr = this.corrHi.getText();
2 26 Feb 07 jari 491     Double DCorr = new Double( sCorr );
2 26 Feb 07 jari 492     return DCorr.doubleValue();
2 26 Feb 07 jari 493   }
2 26 Feb 07 jari 494   public double getCorrStep() {
2 26 Feb 07 jari 495     String sCorr = this.corrStep.getText();
2 26 Feb 07 jari 496     Double DCorr = new Double( sCorr );
2 26 Feb 07 jari 497     return DCorr.doubleValue();
2 26 Feb 07 jari 498   }
2 26 Feb 07 jari 499   public int getFold() {
2 26 Feb 07 jari 500     SpinnerNumberModel model = ( SpinnerNumberModel ) this.fold.getModel();
2 26 Feb 07 jari 501     Number N = model.getNumber();
2 26 Feb 07 jari 502     return N.intValue();
2 26 Feb 07 jari 503   }
2 26 Feb 07 jari 504   public int getNumBins() {
2 26 Feb 07 jari 505     SpinnerNumberModel model = ( SpinnerNumberModel ) this.numBins.getModel();
2 26 Feb 07 jari 506     Number N = model.getNumber();
2 26 Feb 07 jari 507     return N.intValue();
2 26 Feb 07 jari 508   }
2 26 Feb 07 jari 509   public int getDeltaHi() {
2 26 Feb 07 jari 510     SpinnerNumberModel model = ( SpinnerNumberModel ) this.delta.getModel();
2 26 Feb 07 jari 511     Number N = model.getNumber();
2 26 Feb 07 jari 512     return N.intValue();
2 26 Feb 07 jari 513   }
2 26 Feb 07 jari 514   public boolean doLoocv() {
2 26 Feb 07 jari 515     if( this.loocv.isSelected() ) {
2 26 Feb 07 jari 516       return true;
2 26 Feb 07 jari 517     } else {
2 26 Feb 07 jari 518       return false;
2 26 Feb 07 jari 519     }
2 26 Feb 07 jari 520   }
2 26 Feb 07 jari 521 }//end class
2 26 Feb 07 jari 522     
2 26 Feb 07 jari 523 /*
2 26 Feb 07 jari 524 //old code, but hesitant to trash
2 26 Feb 07 jari 525 super(new JFrame(), "USC:Uncorrelated Shrunken Centroid Classification", true);
2 26 Feb 07 jari 526 this.setResizable(false);
2 26 Feb 07 jari 527 this.setSize(500,300);
2 26 Feb 07 jari 528     
2 26 Feb 07 jari 529 this.htField = new Hashtable();
2 26 Feb 07 jari 530 this.htLabel = new Hashtable();
2 26 Feb 07 jari 531     
2 26 Feb 07 jari 532 this.dSpin = new Dimension( 50, 20 );
2 26 Feb 07 jari 533 this.dLabel = new Dimension( 100, 20 );
2 26 Feb 07 jari 534 this.dField = new Dimension( 150, 20 );
2 26 Feb 07 jari 535     
2 26 Feb 07 jari 536 this.radioPanel.setLayout( new BoxLayout( this.radioPanel, BoxLayout.Y_AXIS ) );
2 26 Feb 07 jari 537 this.classPanel = new JPanel();
2 26 Feb 07 jari 538 this.classLabelPanel = new JPanel();
2 26 Feb 07 jari 539 this.classLabelPanel.setLayout( new BoxLayout( this.classLabelPanel, BoxLayout.Y_AXIS ) );
2 26 Feb 07 jari 540 this.classFieldPanel = new JPanel();
2 26 Feb 07 jari 541 this.classFieldPanel.setLayout( new BoxLayout( this.classFieldPanel, BoxLayout.Y_AXIS ) );
2 26 Feb 07 jari 542     
2 26 Feb 07 jari 543 JLabel spinnerLabel = new JLabel( "# of Classes" );
2 26 Feb 07 jari 544 spinnerLabel.setPreferredSize( dLabel );
2 26 Feb 07 jari 545 spinnerLabel.setMaximumSize( dLabel );
2 26 Feb 07 jari 546 spinnerLabel.setMinimumSize( dLabel );
2 26 Feb 07 jari 547 this.classLabelPanel.add( spinnerLabel );
2 26 Feb 07 jari 548     
2 26 Feb 07 jari 549 SpinnerNumberModel spinModel = new SpinnerNumberModel( 2, 1, 25, 1);
2 26 Feb 07 jari 550 this.spinner = new JSpinner( spinModel );
2 26 Feb 07 jari 551 this.spinner.addChangeListener( this );
2 26 Feb 07 jari 552 this.spinner.setPreferredSize( dSpin );
2 26 Feb 07 jari 553 this.spinner.setMaximumSize( dSpin );
2 26 Feb 07 jari 554 this.spinner.setMinimumSize( dSpin );
2 26 Feb 07 jari 555 this.classFieldPanel.add( spinner );
2 26 Feb 07 jari 556     
2 26 Feb 07 jari 557 //Radio button options to find out what user wants to do
2 26 Feb 07 jari 558 this.trainPlusClassify = new JRadioButton("Train USC then Classify");
2 26 Feb 07 jari 559 this.trainPlusClassify.setSelected(true);
2 26 Feb 07 jari 560 this.trainPlusClassify.setHorizontalAlignment(JRadioButton.RIGHT);
2 26 Feb 07 jari 561 radioPanel.add( this.trainPlusClassify );
2 26 Feb 07 jari 562     
2 26 Feb 07 jari 563 this.classifyFromFile = new JRadioButton("Classify from a file");
2 26 Feb 07 jari 564 this.classifyFromFile.setSelected(false);
2 26 Feb 07 jari 565 this.classifyFromFile.setHorizontalAlignment(JRadioButton.RIGHT);
2 26 Feb 07 jari 566 this.radioPanel.add( this.classifyFromFile );
2 26 Feb 07 jari 567     
2 26 Feb 07 jari 568 //group buttons so only 1 is selected at a time
2 26 Feb 07 jari 569 ButtonGroup selectionGroup = new ButtonGroup();
2 26 Feb 07 jari 570 selectionGroup.add(this.trainPlusClassify);
2 26 Feb 07 jari 571 selectionGroup.add(this.classifyFromFile);
2 26 Feb 07 jari 572     
2 26 Feb 07 jari 573 this.classPanel.add( this.classLabelPanel );
2 26 Feb 07 jari 574 this.classPanel.add( this.classFieldPanel );
2 26 Feb 07 jari 575 JScrollPane scrollPane = new JScrollPane( this.classPanel );
2 26 Feb 07 jari 576 JSplitPane jsp = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, this.radioPanel, scrollPane );
2 26 Feb 07 jari 577     
2 26 Feb 07 jari 578 //listen for actions
2 26 Feb 07 jari 579 Listener listener = new Listener();
2 26 Feb 07 jari 580 super.addWindowListener(listener);
2 26 Feb 07 jari 581 super.setActionListeners(listener);
2 26 Feb 07 jari 582     
2 26 Feb 07 jari 583 this.displayClassInputs();
2 26 Feb 07 jari 584     
2 26 Feb 07 jari 585 //finally, display it
2 26 Feb 07 jari 586 this.addContent( jspl );
2 26 Feb 07 jari 587 */
2 26 Feb 07 jari 588   
2 26 Feb 07 jari 589   /*
2 26 Feb 07 jari 590   private boolean validateFields() {
2 26 Feb 07 jari 591     boolean toReturn = true;
2 26 Feb 07 jari 592     
2 26 Feb 07 jari 593     Vector vLabel = new Vector();
2 26 Feb 07 jari 594     Vector vField = new Vector();
2 26 Feb 07 jari 595     
2 26 Feb 07 jari 596     //first make sure each class has some text in it
2 26 Feb 07 jari 597     Enumeration enKey = this.htField.keys();
2 26 Feb 07 jari 598     while( enKey.hasMoreElements() ) {
2 26 Feb 07 jari 599       String key = ( String ) enKey.nextElement();
2 26 Feb 07 jari 600       
2 26 Feb 07 jari 601       JLabel label = ( JLabel ) this.htLabel.get( key );
2 26 Feb 07 jari 602       JTextField field = ( JTextField ) this.htField.get( key );
2 26 Feb 07 jari 603       vLabel.add( label.getText() );
2 26 Feb 07 jari 604       vField.add( field.getText() );
2 26 Feb 07 jari 605       
2 26 Feb 07 jari 606       if( field.getText() == null || field.getText().equalsIgnoreCase( "" ) ) {
2 26 Feb 07 jari 607         toReturn = false;
2 26 Feb 07 jari 608         this.error( label.getText() + " cannot be blank.  Please enter a label" );
2 26 Feb 07 jari 609         break;
2 26 Feb 07 jari 610       }
2 26 Feb 07 jari 611     }
2 26 Feb 07 jari 612     
2 26 Feb 07 jari 613     boolean breakOuter = false;
2 26 Feb 07 jari 614     
2 26 Feb 07 jari 615     //if none are blank, look out for duplicates
2 26 Feb 07 jari 616     for( int i = 0; i < vField.size(); i ++ ) {
2 26 Feb 07 jari 617       String sI = ( String ) vField.elementAt( i );
2 26 Feb 07 jari 618       String labelI = ( String ) vLabel.elementAt( i );
2 26 Feb 07 jari 619       for( int j = 0; j < vField.size(); j ++ ) {
2 26 Feb 07 jari 620         String sJ = ( String ) vField.elementAt( j );
2 26 Feb 07 jari 621         String labelJ = ( String ) vLabel.elementAt( j );
2 26 Feb 07 jari 622         
2 26 Feb 07 jari 623         if( i != j ) {
2 26 Feb 07 jari 624           if( sI.equals( sJ ) ) {
2 26 Feb 07 jari 625             toReturn = false;
2 26 Feb 07 jari 626             this.error( labelI + "(" + sI + ") and " + labelJ + "(" + sJ + ") cannot be the same" );
2 26 Feb 07 jari 627             breakOuter = true;
2 26 Feb 07 jari 628             break;
2 26 Feb 07 jari 629           }
2 26 Feb 07 jari 630         }
2 26 Feb 07 jari 631       }//end j
2 26 Feb 07 jari 632       
2 26 Feb 07 jari 633       if( breakOuter ) {
2 26 Feb 07 jari 634         break;
2 26 Feb 07 jari 635       }
2 26 Feb 07 jari 636     }//end i
2 26 Feb 07 jari 637     return toReturn;
2 26 Feb 07 jari 638   }
2 26 Feb 07 jari 639   */
2 26 Feb 07 jari 640
2 26 Feb 07 jari 641   /*
2 26 Feb 07 jari 642   public int getNumClasses() {
2 26 Feb 07 jari 643     Integer I = ( Integer ) this.spinner.getValue();
2 26 Feb 07 jari 644     int numClasses = I.intValue();
2 26 Feb 07 jari 645     return numClasses;
2 26 Feb 07 jari 646   }
2 26 Feb 07 jari 647   
2 26 Feb 07 jari 648   
2 26 Feb 07 jari 649   public void removeClassInputs() {
2 26 Feb 07 jari 650     Enumeration enLabel = this.htLabel.keys();
2 26 Feb 07 jari 651     while( enLabel.hasMoreElements() ) {
2 26 Feb 07 jari 652       String key = ( String ) enLabel.nextElement();
2 26 Feb 07 jari 653       
2 26 Feb 07 jari 654       JLabel label = ( JLabel ) this.htLabel.get( key );
2 26 Feb 07 jari 655       JTextField field = ( JTextField ) this.htField.get( key );
2 26 Feb 07 jari 656       this.classLabelPanel.remove( label );
2 26 Feb 07 jari 657       this.classFieldPanel.remove( field );
2 26 Feb 07 jari 658     }
2 26 Feb 07 jari 659     
2 26 Feb 07 jari 660     this.htField.clear();
2 26 Feb 07 jari 661     this.htLabel.clear();
2 26 Feb 07 jari 662
2 26 Feb 07 jari 663     this.getRootPane().revalidate();
2 26 Feb 07 jari 664   }//end removeClassInputs()
2 26 Feb 07 jari 665   
2 26 Feb 07 jari 666   
2 26 Feb 07 jari 667   public void displayClassInputs() {
2 26 Feb 07 jari 668     this.removeClassInputs();
2 26 Feb 07 jari 669     
2 26 Feb 07 jari 670     Integer I = ( Integer ) this.spinner.getValue();
2 26 Feb 07 jari 671     int numClasses = I.intValue();
2 26 Feb 07 jari 672     
2 26 Feb 07 jari 673     for( int i = 0; i < numClasses; i ++ ) {
2 26 Feb 07 jari 674       String sLabel = Integer.toString( i );
2 26 Feb 07 jari 675       String sLabe2Display = "Class " + Integer.toString( i + 1 ) + " Label";
2 26 Feb 07 jari 676       JLabel label = new JLabel( sLabe2Display );
2 26 Feb 07 jari 677       label.setPreferredSize( this.dLabel );
2 26 Feb 07 jari 678       label.setMaximumSize( this.dLabel );
2 26 Feb 07 jari 679       label.setMinimumSize( this.dLabel );
2 26 Feb 07 jari 680       this.classLabelPanel.add( label );
2 26 Feb 07 jari 681       
2 26 Feb 07 jari 682       JTextField field = new JTextField();
2 26 Feb 07 jari 683       field.setPreferredSize( this.dField );
2 26 Feb 07 jari 684       field.setMaximumSize( this.dField );
2 26 Feb 07 jari 685       field.setMinimumSize( this.dField );
2 26 Feb 07 jari 686       this.classFieldPanel.add( field );
2 26 Feb 07 jari 687       
2 26 Feb 07 jari 688       this.htField.put( sLabel, field );
2 26 Feb 07 jari 689       this.htLabel.put( sLabel, label );
2 26 Feb 07 jari 690       
2 26 Feb 07 jari 691       label.setVisible( true );
2 26 Feb 07 jari 692     }//end i
2 26 Feb 07 jari 693     
2 26 Feb 07 jari 694     this.getRootPane().revalidate();
2 26 Feb 07 jari 695   }//end displayClassInputs();
2 26 Feb 07 jari 696
2 26 Feb 07 jari 697
2 26 Feb 07 jari 698   //
2 26 Feb 07 jari 699   public void stateChanged(ChangeEvent e) {
2 26 Feb 07 jari 700     this.displayClassInputs();
2 26 Feb 07 jari 701   }//end stateChanged()
2 26 Feb 07 jari 702   
2 26 Feb 07 jari 703   
2 26 Feb 07 jari 704   public Hashtable getHtLabel() {
2 26 Feb 07 jari 705     return this.htLabel;
2 26 Feb 07 jari 706   }
2 26 Feb 07 jari 707   public Hashtable getHtField() {
2 26 Feb 07 jari 708     return this.htField;
2 26 Feb 07 jari 709   }
2 26 Feb 07 jari 710   */