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

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * Created on Dec 3, 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.BorderLayout;
2 26 Feb 07 jari 7 import java.awt.Component;
2 26 Feb 07 jari 8 import java.awt.Dimension;
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.ItemEvent;
2 26 Feb 07 jari 12 import java.awt.event.ItemListener;
2 26 Feb 07 jari 13 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 14 import java.awt.event.MouseMotionAdapter;
2 26 Feb 07 jari 15 import java.awt.event.WindowEvent;
2 26 Feb 07 jari 16 import java.text.DecimalFormat;
2 26 Feb 07 jari 17 import java.util.HashMap;
2 26 Feb 07 jari 18 import java.util.Map;
2 26 Feb 07 jari 19 import java.util.Vector;
2 26 Feb 07 jari 20
2 26 Feb 07 jari 21 import javax.swing.ButtonGroup;
2 26 Feb 07 jari 22 import javax.swing.DefaultCellEditor;
2 26 Feb 07 jari 23 import javax.swing.JCheckBox;
2 26 Feb 07 jari 24 import javax.swing.JFrame;
2 26 Feb 07 jari 25 import javax.swing.JOptionPane;
2 26 Feb 07 jari 26 import javax.swing.JPanel;
2 26 Feb 07 jari 27 import javax.swing.JRadioButton;
2 26 Feb 07 jari 28 import javax.swing.JScrollPane;
2 26 Feb 07 jari 29 import javax.swing.JTable;
2 26 Feb 07 jari 30 import javax.swing.ToolTipManager;
2 26 Feb 07 jari 31 import javax.swing.event.TableModelEvent;
2 26 Feb 07 jari 32 import javax.swing.table.DefaultTableModel;
2 26 Feb 07 jari 33 import javax.swing.table.JTableHeader;
2 26 Feb 07 jari 34 import javax.swing.table.TableCellRenderer;
2 26 Feb 07 jari 35 import javax.swing.table.TableColumn;
2 26 Feb 07 jari 36 import javax.swing.table.TableColumnModel;
2 26 Feb 07 jari 37 import javax.swing.table.TableModel;
2 26 Feb 07 jari 38
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.AlgorithmDialog;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.DialogListener;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.impl.dialogs.dialogHelpUtil.HelpWindow;
2 26 Feb 07 jari 42 import org.tigr.microarray.mev.r.TableSorter;
2 26 Feb 07 jari 43
2 26 Feb 07 jari 44 /**
2 26 Feb 07 jari 45  * Dialog allows user to choose the Delta and Rho values to use for classification.
2 26 Feb 07 jari 46  * 
2 26 Feb 07 jari 47  * @author vu
2 26 Feb 07 jari 48  */
2 26 Feb 07 jari 49 public class USCDeltaDialog extends AlgorithmDialog {
2 26 Feb 07 jari 50   private USCFoldResult[] foldResults;    //USCFoldResult[ numFolds ]
2 26 Feb 07 jari 51   private USCXValResult xValResults;      //
2 26 Feb 07 jari 52   private USCDeltaRhoResult[][][] xResult;
2 26 Feb 07 jari 53   private int buttonPushed;
2 26 Feb 07 jari 54   private JPanel mainPanel;
2 26 Feb 07 jari 55   private JCheckBox saveBox;
2 26 Feb 07 jari 56   private Vector vRow;
2 26 Feb 07 jari 57   private JTable jt;
2 26 Feb 07 jari 58   
2 26 Feb 07 jari 59   
2 26 Feb 07 jari 60   /**
2 26 Feb 07 jari 61    * Deal with the case where #Folds=1, in which case, don't display mistakes or calls
2 26 Feb 07 jari 62    * @param results
2 26 Feb 07 jari 63    * @param foldIsOne
2 26 Feb 07 jari 64    */
2 26 Feb 07 jari 65   public USCDeltaDialog( USCXValResult results, boolean foldIsOne ) {
2 26 Feb 07 jari 66     super( new JFrame(), "Choose your parameters", true );
2 26 Feb 07 jari 67     
2 26 Feb 07 jari 68     this.setSize( 600, 400 );
2 26 Feb 07 jari 69     
2 26 Feb 07 jari 70     this.xValResults = results;
2 26 Feb 07 jari 71     
2 26 Feb 07 jari 72     this.createGUI( this.xValResults, foldIsOne );
2 26 Feb 07 jari 73     
2 26 Feb 07 jari 74     Listener listener = new Listener();
2 26 Feb 07 jari 75     super.addWindowListener( listener );
2 26 Feb 07 jari 76     super.setActionListeners( listener );
2 26 Feb 07 jari 77   }
2 26 Feb 07 jari 78   public USCDeltaDialog(USCDeltaRhoResult[][][] xResultP, boolean foldIsOne) {
2 26 Feb 07 jari 79     super( new JFrame(), "Choose your parameters", true );
2 26 Feb 07 jari 80     this.setSize( 600, 400);;
2 26 Feb 07 jari 81     
2 26 Feb 07 jari 82     this.xResult = xResultP;
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     this.createGUI(this.xResult, foldIsOne);
2 26 Feb 07 jari 85     
2 26 Feb 07 jari 86     Listener listener = new Listener();
2 26 Feb 07 jari 87     super.addWindowListener( listener );
2 26 Feb 07 jari 88     super.setActionListeners( listener );
2 26 Feb 07 jari 89   }
2 26 Feb 07 jari 90   
2 26 Feb 07 jari 91   
2 26 Feb 07 jari 92   /**
2 26 Feb 07 jari 93    * 
2 26 Feb 07 jari 94    * @param results USCFoldResult[ numDelta * numRho ] (50 * 6 = 300 default)
2 26 Feb 07 jari 95    */
2 26 Feb 07 jari 96   private void createGUI( USCXValResult results, boolean foldIsOne ) {
2 26 Feb 07 jari 97     this.mainPanel = new JPanel( new BorderLayout() );
2 26 Feb 07 jari 98     
2 26 Feb 07 jari 99     JPanel radioPanel = this.createRadioPanel( results, foldIsOne );
2 26 Feb 07 jari 100     this.mainPanel.add( radioPanel, BorderLayout.CENTER );
2 26 Feb 07 jari 101     
2 26 Feb 07 jari 102     this.mainPanel.add( this.createSavePanel(), BorderLayout.SOUTH );
2 26 Feb 07 jari 103     
2 26 Feb 07 jari 104     this.addContent( this.mainPanel );
2 26 Feb 07 jari 105   }//createGUI()
2 26 Feb 07 jari 106   private void createGUI( USCDeltaRhoResult[][][] xResult, boolean foldIsOne ) {
2 26 Feb 07 jari 107     this.mainPanel = new JPanel( new BorderLayout() );
2 26 Feb 07 jari 108     
2 26 Feb 07 jari 109     JPanel radioPanel = this.createRadioPanel( xResult, foldIsOne );
2 26 Feb 07 jari 110     this.mainPanel.add( radioPanel, BorderLayout.CENTER );
2 26 Feb 07 jari 111     this.mainPanel.add( this.createSavePanel(), BorderLayout.SOUTH );
2 26 Feb 07 jari 112     this.addContent( this.mainPanel );
2 26 Feb 07 jari 113   }
2 26 Feb 07 jari 114   
2 26 Feb 07 jari 115   
2 26 Feb 07 jari 116   /**
2 26 Feb 07 jari 117    * 
2 26 Feb 07 jari 118    * @param results USCFoldResult[ numDelta * numRho ] (50 * 6 = 300 default)
2 26 Feb 07 jari 119    * @return
2 26 Feb 07 jari 120    */
2 26 Feb 07 jari 121   private JPanel createRadioPanel( USCDeltaRhoResult[][][] results, boolean foldIsOne ) {
2 26 Feb 07 jari 122     JPanel toReturn = new JPanel();
2 26 Feb 07 jari 123     
2 26 Feb 07 jari 124     //store the USCRow objects
2 26 Feb 07 jari 125     this.vRow = this.createRows( results );
2 26 Feb 07 jari 126     
2 26 Feb 07 jari 127     //column headers
2 26 Feb 07 jari 128     String[] header;
2 26 Feb 07 jari 129     String[] toolTips;
2 26 Feb 07 jari 130     Object[][] table;
2 26 Feb 07 jari 131     
2 26 Feb 07 jari 132     if( foldIsOne ) {
2 26 Feb 07 jari 133       header = new String[ 4 ];
2 26 Feb 07 jari 134       header[ 0 ] = "";
2 26 Feb 07 jari 135       header[ 1 ] = "Avg#Genes";
2 26 Feb 07 jari 136       header[ 2 ] = "Delta";
2 26 Feb 07 jari 137       header[ 3 ] = "Rho";
2 26 Feb 07 jari 138       toolTips = new String[ 4 ];
2 26 Feb 07 jari 139       toolTips[ 0 ] = "Choose the Delta/Rho combination to use";
2 26 Feb 07 jari 140       toolTips[ 1 ] = "Average # of Genes Used to classify over all CrossValidation folds";
2 26 Feb 07 jari 141       toolTips[ 2 ] = "Amount of Shrinkage applied to Class Centroids";
2 26 Feb 07 jari 142       toolTips[ 3 ] = "Lower Threshold of Gene Correlation";
2 26 Feb 07 jari 143       
2 26 Feb 07 jari 144       table = new Object[ this.vRow.size() ][ 4 ];
2 26 Feb 07 jari 145       for( int i = 0; i < this.vRow.size(); i ++ ) {
2 26 Feb 07 jari 146         USCRow row = ( USCRow ) this.vRow.elementAt( i );
2 26 Feb 07 jari 147         table[ i ][ 0 ] = row.getButton();
2 26 Feb 07 jari 148         table[ i ][ 1 ] = row.getNumGenes();
2 26 Feb 07 jari 149         table[ i ][ 2 ] = row.getDelta();
2 26 Feb 07 jari 150         table[ i ][ 3 ] = row.getRho();
2 26 Feb 07 jari 151       }//i
2 26 Feb 07 jari 152     } else {
2 26 Feb 07 jari 153       header = new String [ 5 ];
2 26 Feb 07 jari 154       header[ 0 ] = "";
2 26 Feb 07 jari 155       header[ 1 ] = "#Mistakes";
2 26 Feb 07 jari 156       header[ 2 ] = "Avg#Genes";
2 26 Feb 07 jari 157       header[ 3 ] = "Delta";
2 26 Feb 07 jari 158       header[ 4 ] = "Rho";
2 26 Feb 07 jari 159       toolTips = new String[ 5 ];
2 26 Feb 07 jari 160       toolTips[ 0 ] = "Choose the Delta/Rho combination to use";
2 26 Feb 07 jari 161       toolTips[ 1 ] = "Total # of Mistaken Class Assignments";
2 26 Feb 07 jari 162       toolTips[ 2 ] = "Average # of Genes Used to classify over all CrossValidation folds";
2 26 Feb 07 jari 163       toolTips[ 3 ] = "Amount of Shrinkage applied to Class Centroids";
2 26 Feb 07 jari 164       toolTips[ 4 ] = "Lower Threshold of Gene Correlation";
2 26 Feb 07 jari 165       
2 26 Feb 07 jari 166       table = new Object[ this.vRow.size() ][ 5 ];
2 26 Feb 07 jari 167       for( int i = 0; i < this.vRow.size(); i ++ ) {
2 26 Feb 07 jari 168         USCRow row = ( USCRow ) this.vRow.elementAt( i );
2 26 Feb 07 jari 169         table[ i ][ 0 ] = row.getButton();
2 26 Feb 07 jari 170         table[ i ][ 1 ] = row.getNumErrors();
2 26 Feb 07 jari 171         table[ i ][ 2 ] = row.getNumGenes();
2 26 Feb 07 jari 172         table[ i ][ 3 ] = row.getDelta();
2 26 Feb 07 jari 173         table[ i ][ 4 ] = row.getRho();
2 26 Feb 07 jari 174       }//i
2 26 Feb 07 jari 175     }
2 26 Feb 07 jari 176     
2 26 Feb 07 jari 177     //the table data
2 26 Feb 07 jari 178     DefaultTableModel dm = new DefaultTableModel();
2 26 Feb 07 jari 179     dm.setDataVector( table, header );
2 26 Feb 07 jari 180     
2 26 Feb 07 jari 181     //create the JTable
2 26 Feb 07 jari 182     TableSorter sorter = new TableSorter( dm );
2 26 Feb 07 jari 183     this.jt = new JTable( sorter ) {
2 26 Feb 07 jari 184       public void tableChanged(TableModelEvent e) {
2 26 Feb 07 jari 185         super.tableChanged(e);
2 26 Feb 07 jari 186         repaint();
2 26 Feb 07 jari 187       }
2 26 Feb 07 jari 188     };
2 26 Feb 07 jari 189     sorter.setTableHeader( this.jt.getTableHeader() );
2 26 Feb 07 jari 190     if( foldIsOne ) {
2 26 Feb 07 jari 191       this.jt.setPreferredScrollableViewportSize(new Dimension(245, 240));
2 26 Feb 07 jari 192     
2 26 Feb 07 jari 193       //set column widths
2 26 Feb 07 jari 194       this.jt.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
2 26 Feb 07 jari 195       TableColumn column = null;
2 26 Feb 07 jari 196       for ( int i = 0; i < table[ 0 ].length; i ++ ) {
2 26 Feb 07 jari 197         column = jt.getColumnModel().getColumn(i);
2 26 Feb 07 jari 198         if (i == 0) {
2 26 Feb 07 jari 199           column.setPreferredWidth(20);
2 26 Feb 07 jari 200           column.setMinWidth(20);
2 26 Feb 07 jari 201         } else if( i == 1 || i == 2 ) {
2 26 Feb 07 jari 202           column.setPreferredWidth(75);
2 26 Feb 07 jari 203           column.setMinWidth(75);
2 26 Feb 07 jari 204         } else if( i == 3 ) {
2 26 Feb 07 jari 205           column.setPreferredWidth(55);
2 26 Feb 07 jari 206           column.setMinWidth(55);
2 26 Feb 07 jari 207         }
2 26 Feb 07 jari 208       }
2 26 Feb 07 jari 209     } else {
2 26 Feb 07 jari 210       this.jt.setPreferredScrollableViewportSize(new Dimension(280, 240));
2 26 Feb 07 jari 211     
2 26 Feb 07 jari 212       //set column widths
2 26 Feb 07 jari 213       this.jt.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
2 26 Feb 07 jari 214       TableColumn column = null;
2 26 Feb 07 jari 215       for ( int i = 0; i < table[ 0 ].length; i ++ ) {
2 26 Feb 07 jari 216         column = jt.getColumnModel().getColumn(i);
2 26 Feb 07 jari 217         if (i == 0) {
2 26 Feb 07 jari 218           column.setPreferredWidth(20);
2 26 Feb 07 jari 219           column.setMinWidth(20);
2 26 Feb 07 jari 220         } else if( i == 1 ) {
2 26 Feb 07 jari 221           column.setPreferredWidth(75);
2 26 Feb 07 jari 222           column.setMinWidth(75);
2 26 Feb 07 jari 223         } else if( i == 2 ) {
2 26 Feb 07 jari 224           column.setPreferredWidth(75);
2 26 Feb 07 jari 225           column.setMinWidth(75);
2 26 Feb 07 jari 226         } else if(i == 3 || i == 4 ) {
2 26 Feb 07 jari 227           column.setPreferredWidth(55);
2 26 Feb 07 jari 228           column.setMinWidth(55);
2 26 Feb 07 jari 229         } else {
2 26 Feb 07 jari 230           column.setPreferredWidth(50);
2 26 Feb 07 jari 231           column.setMinWidth(50);
2 26 Feb 07 jari 232         }
2 26 Feb 07 jari 233       }
2 26 Feb 07 jari 234     }
2 26 Feb 07 jari 235     
2 26 Feb 07 jari 236     this.jt.getColumn("").setCellRenderer( new RadioButtonRenderer() );
2 26 Feb 07 jari 237     this.jt.getColumn("").setCellEditor(new RadioButtonEditor(new JCheckBox()));
2 26 Feb 07 jari 238     
2 26 Feb 07 jari 239     //set tool tips for columns
2 26 Feb 07 jari 240     ColumnHeaderToolTips tips = new ColumnHeaderToolTips();
2 26 Feb 07 jari 241     for( int t = 0; t < toolTips.length; t ++ ) {
2 26 Feb 07 jari 242       TableColumn col = this.jt.getColumnModel().getColumn( t );
2 26 Feb 07 jari 243       tips.setToolTip( col, toolTips[ t ] );
2 26 Feb 07 jari 244     }
2 26 Feb 07 jari 245     JTableHeader head = this.jt.getTableHeader();
2 26 Feb 07 jari 246     head.addMouseMotionListener(tips);
2 26 Feb 07 jari 247     ToolTipManager.sharedInstance().setInitialDelay( 0 );
2 26 Feb 07 jari 248
2 26 Feb 07 jari 249     //group the radio buttons
2 26 Feb 07 jari 250     ButtonGroup group1 = new ButtonGroup();
2 26 Feb 07 jari 251     for( int i = 0; i < this.vRow.size(); i ++ ) {
2 26 Feb 07 jari 252       group1.add( ( JRadioButton ) dm.getValueAt( i, 0 ) );
2 26 Feb 07 jari 253     }
2 26 Feb 07 jari 254     
2 26 Feb 07 jari 255     //add components and return
2 26 Feb 07 jari 256     JScrollPane jsp = new JScrollPane( this.jt );
2 26 Feb 07 jari 257     toReturn.add( jsp );
2 26 Feb 07 jari 258     
2 26 Feb 07 jari 259     return toReturn;
2 26 Feb 07 jari 260   }//createRadioPanel()
2 26 Feb 07 jari 261   private JPanel createRadioPanel( USCXValResult results, boolean foldIsOne ) {
2 26 Feb 07 jari 262     JPanel toReturn = new JPanel();
2 26 Feb 07 jari 263     
2 26 Feb 07 jari 264     //store the USCRow objects
2 26 Feb 07 jari 265     this.vRow = this.createRows( results );
2 26 Feb 07 jari 266     
2 26 Feb 07 jari 267     //column headers
2 26 Feb 07 jari 268     String[] header;
2 26 Feb 07 jari 269     String[] toolTips;
2 26 Feb 07 jari 270     Object[][] table;
2 26 Feb 07 jari 271     
2 26 Feb 07 jari 272     if( foldIsOne ) {
2 26 Feb 07 jari 273       header = new String[ 4 ];
2 26 Feb 07 jari 274       header[ 0 ] = "";
2 26 Feb 07 jari 275       header[ 1 ] = "Avg#Genes";
2 26 Feb 07 jari 276       header[ 2 ] = "Delta";
2 26 Feb 07 jari 277       header[ 3 ] = "Rho";
2 26 Feb 07 jari 278       toolTips = new String[ 4 ];
2 26 Feb 07 jari 279       toolTips[ 0 ] = "Choose the Delta/Rho combination to use";
2 26 Feb 07 jari 280       toolTips[ 1 ] = "Average # of Genes Used to classify over all CrossValidation folds";
2 26 Feb 07 jari 281       toolTips[ 2 ] = "Amount of Shrinkage applied to Class Centroids";
2 26 Feb 07 jari 282       toolTips[ 3 ] = "Lower Threshold of Gene Correlation";
2 26 Feb 07 jari 283       
2 26 Feb 07 jari 284       table = new Object[ this.vRow.size() ][ 4 ];
2 26 Feb 07 jari 285       for( int i = 0; i < this.vRow.size(); i ++ ) {
2 26 Feb 07 jari 286         USCRow row = ( USCRow ) this.vRow.elementAt( i );
2 26 Feb 07 jari 287         table[ i ][ 0 ] = row.getButton();
2 26 Feb 07 jari 288         table[ i ][ 1 ] = row.getNumGenes();
2 26 Feb 07 jari 289         table[ i ][ 2 ] = row.getDelta();
2 26 Feb 07 jari 290         table[ i ][ 3 ] = row.getRho();
2 26 Feb 07 jari 291       }//i
2 26 Feb 07 jari 292     } else {
2 26 Feb 07 jari 293       header = new String [ 5 ];
2 26 Feb 07 jari 294       header[ 0 ] = "";
2 26 Feb 07 jari 295       header[ 1 ] = "#Mistakes";
2 26 Feb 07 jari 296       header[ 2 ] = "Avg#Genes";
2 26 Feb 07 jari 297       header[ 3 ] = "Delta";
2 26 Feb 07 jari 298       header[ 4 ] = "Rho";
2 26 Feb 07 jari 299       toolTips = new String[ 5 ];
2 26 Feb 07 jari 300       toolTips[ 0 ] = "Choose the Delta/Rho combination to use";
2 26 Feb 07 jari 301       toolTips[ 1 ] = "Total # of Mistaken Class Assignments";
2 26 Feb 07 jari 302       toolTips[ 2 ] = "Average # of Genes Used to classify over all CrossValidation folds";
2 26 Feb 07 jari 303       toolTips[ 3 ] = "Amount of Shrinkage applied to Class Centroids";
2 26 Feb 07 jari 304       toolTips[ 4 ] = "Lower Threshold of Gene Correlation";
2 26 Feb 07 jari 305       
2 26 Feb 07 jari 306       table = new Object[ this.vRow.size() ][ 5 ];
2 26 Feb 07 jari 307       for( int i = 0; i < this.vRow.size(); i ++ ) {
2 26 Feb 07 jari 308         USCRow row = ( USCRow ) this.vRow.elementAt( i );
2 26 Feb 07 jari 309         table[ i ][ 0 ] = row.getButton();
2 26 Feb 07 jari 310         table[ i ][ 1 ] = row.getNumErrors();
2 26 Feb 07 jari 311         table[ i ][ 2 ] = row.getNumGenes();
2 26 Feb 07 jari 312         table[ i ][ 3 ] = row.getDelta();
2 26 Feb 07 jari 313         table[ i ][ 4 ] = row.getRho();
2 26 Feb 07 jari 314       }//i
2 26 Feb 07 jari 315     }
2 26 Feb 07 jari 316     
2 26 Feb 07 jari 317     //the table data
2 26 Feb 07 jari 318     DefaultTableModel dm = new DefaultTableModel();
2 26 Feb 07 jari 319     dm.setDataVector( table, header );
2 26 Feb 07 jari 320     
2 26 Feb 07 jari 321     //create the JTable
2 26 Feb 07 jari 322     TableSorter sorter = new TableSorter( dm );
2 26 Feb 07 jari 323     this.jt = new JTable( sorter ) {
2 26 Feb 07 jari 324       public void tableChanged(TableModelEvent e) {
2 26 Feb 07 jari 325         super.tableChanged(e);
2 26 Feb 07 jari 326         repaint();
2 26 Feb 07 jari 327       }
2 26 Feb 07 jari 328     };
2 26 Feb 07 jari 329     sorter.setTableHeader( this.jt.getTableHeader() );
2 26 Feb 07 jari 330     if( foldIsOne ) {
2 26 Feb 07 jari 331       this.jt.setPreferredScrollableViewportSize(new Dimension(245, 240));
2 26 Feb 07 jari 332     
2 26 Feb 07 jari 333       //set column widths
2 26 Feb 07 jari 334       this.jt.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
2 26 Feb 07 jari 335       TableColumn column = null;
2 26 Feb 07 jari 336       for ( int i = 0; i < table[ 0 ].length; i ++ ) {
2 26 Feb 07 jari 337         column = jt.getColumnModel().getColumn(i);
2 26 Feb 07 jari 338         if (i == 0) {
2 26 Feb 07 jari 339           column.setPreferredWidth(20);
2 26 Feb 07 jari 340           column.setMinWidth(20);
2 26 Feb 07 jari 341         } else if( i == 1 || i == 2 ) {
2 26 Feb 07 jari 342           column.setPreferredWidth(75);
2 26 Feb 07 jari 343           column.setMinWidth(75);
2 26 Feb 07 jari 344         } else if( i == 3 ) {
2 26 Feb 07 jari 345           column.setPreferredWidth(55);
2 26 Feb 07 jari 346           column.setMinWidth(55);
2 26 Feb 07 jari 347         }
2 26 Feb 07 jari 348       }
2 26 Feb 07 jari 349     } else {
2 26 Feb 07 jari 350       this.jt.setPreferredScrollableViewportSize(new Dimension(280, 240));
2 26 Feb 07 jari 351     
2 26 Feb 07 jari 352       //set column widths
2 26 Feb 07 jari 353       this.jt.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
2 26 Feb 07 jari 354       TableColumn column = null;
2 26 Feb 07 jari 355       for ( int i = 0; i < table[ 0 ].length; i ++ ) {
2 26 Feb 07 jari 356         column = jt.getColumnModel().getColumn(i);
2 26 Feb 07 jari 357         if (i == 0) {
2 26 Feb 07 jari 358           column.setPreferredWidth(20);
2 26 Feb 07 jari 359           column.setMinWidth(20);
2 26 Feb 07 jari 360         } else if( i == 1 ) {
2 26 Feb 07 jari 361           column.setPreferredWidth(75);
2 26 Feb 07 jari 362           column.setMinWidth(75);
2 26 Feb 07 jari 363         } else if( i == 2 ) {
2 26 Feb 07 jari 364           column.setPreferredWidth(75);
2 26 Feb 07 jari 365           column.setMinWidth(75);
2 26 Feb 07 jari 366         } else if(i == 3 || i == 4 ) {
2 26 Feb 07 jari 367           column.setPreferredWidth(55);
2 26 Feb 07 jari 368           column.setMinWidth(55);
2 26 Feb 07 jari 369         } else {
2 26 Feb 07 jari 370           column.setPreferredWidth(50);
2 26 Feb 07 jari 371           column.setMinWidth(50);
2 26 Feb 07 jari 372         }
2 26 Feb 07 jari 373       }
2 26 Feb 07 jari 374     }
2 26 Feb 07 jari 375     
2 26 Feb 07 jari 376     this.jt.getColumn("").setCellRenderer( new RadioButtonRenderer() );
2 26 Feb 07 jari 377     this.jt.getColumn("").setCellEditor(new RadioButtonEditor(new JCheckBox()));
2 26 Feb 07 jari 378     
2 26 Feb 07 jari 379     //set tool tips for columns
2 26 Feb 07 jari 380     ColumnHeaderToolTips tips = new ColumnHeaderToolTips();
2 26 Feb 07 jari 381     for( int t = 0; t < toolTips.length; t ++ ) {
2 26 Feb 07 jari 382       TableColumn col = this.jt.getColumnModel().getColumn( t );
2 26 Feb 07 jari 383       tips.setToolTip( col, toolTips[ t ] );
2 26 Feb 07 jari 384     }
2 26 Feb 07 jari 385     JTableHeader head = this.jt.getTableHeader();
2 26 Feb 07 jari 386     head.addMouseMotionListener(tips);
2 26 Feb 07 jari 387     ToolTipManager.sharedInstance().setInitialDelay( 0 );
2 26 Feb 07 jari 388
2 26 Feb 07 jari 389     //group the radio buttons
2 26 Feb 07 jari 390     ButtonGroup group1 = new ButtonGroup();
2 26 Feb 07 jari 391     for( int i = 0; i < this.vRow.size(); i ++ ) {
2 26 Feb 07 jari 392       group1.add( ( JRadioButton ) dm.getValueAt( i, 0 ) );
2 26 Feb 07 jari 393     }
2 26 Feb 07 jari 394     
2 26 Feb 07 jari 395     //add components and return
2 26 Feb 07 jari 396     JScrollPane jsp = new JScrollPane( this.jt );
2 26 Feb 07 jari 397     toReturn.add( jsp );
2 26 Feb 07 jari 398     
2 26 Feb 07 jari 399     return toReturn;
2 26 Feb 07 jari 400   }//createRadioPanel()
2 26 Feb 07 jari 401   
2 26 Feb 07 jari 402   
2 26 Feb 07 jari 403   /**
2 26 Feb 07 jari 404    * 
2 26 Feb 07 jari 405    * @return
2 26 Feb 07 jari 406    */
2 26 Feb 07 jari 407   private JPanel createSavePanel() {
2 26 Feb 07 jari 408     JPanel toReturn = new JPanel();
2 26 Feb 07 jari 409     
2 26 Feb 07 jari 410     this.saveBox = new JCheckBox( "Save Training Results" );
2 26 Feb 07 jari 411     this.saveBox.setSelected( true );
2 26 Feb 07 jari 412     
2 26 Feb 07 jari 413     toReturn.add( saveBox );
2 26 Feb 07 jari 414     
2 26 Feb 07 jari 415     return toReturn;
2 26 Feb 07 jari 416   }//createSavePanel()
2 26 Feb 07 jari 417   
2 26 Feb 07 jari 418   
2 26 Feb 07 jari 419   /**
2 26 Feb 07 jari 420    * Compile the results into useable form
2 26 Feb 07 jari 421    * @param results
2 26 Feb 07 jari 422    * @return
2 26 Feb 07 jari 423    */
2 26 Feb 07 jari 424   private Vector createRows( USCDeltaRhoResult[][][] results ) {
2 26 Feb 07 jari 425     Vector vReturn = new Vector();
2 26 Feb 07 jari 426     
2 26 Feb 07 jari 427     ButtonGroup bg = new ButtonGroup();
2 26 Feb 07 jari 428     
2 26 Feb 07 jari 429     int resultKount = results[0].length;
2 26 Feb 07 jari 430     
2 26 Feb 07 jari 431     //loop through results
2 26 Feb 07 jari 432     for( int r = 0; r < results[ 0 ][ 0 ].length; r ++ ) {
2 26 Feb 07 jari 433       int iCorrect = 0;
2 26 Feb 07 jari 434       int iMistake = 0;
2 26 Feb 07 jari 435       int iNumGenes = 0;
2 26 Feb 07 jari 436       int iResults = 0;
2 26 Feb 07 jari 437       double delta = 0;
2 26 Feb 07 jari 438       double rho = 0;
2 26 Feb 07 jari 439       
2 26 Feb 07 jari 440       //compile fold results
2 26 Feb 07 jari 441       for(int f = 0; f < results[ 0 ].length; f ++ ) {
2 26 Feb 07 jari 442         for( int m = 0; m < results.length; m ++ ) {
2 26 Feb 07 jari 443           USCDeltaRhoResult dr = results[ m ][ f ][ r ];
2 26 Feb 07 jari 444           if(!dr.isNull()){
2 26 Feb 07 jari 445             iMistake += dr.getMistake();
2 26 Feb 07 jari 446             iCorrect += dr.getCorrect();
2 26 Feb 07 jari 447             iNumGenes += dr.getNumGene();
2 26 Feb 07 jari 448             iResults ++;
2 26 Feb 07 jari 449             delta = dr.getDelta();
2 26 Feb 07 jari 450             rho = dr.getRho();
2 26 Feb 07 jari 451           }
2 26 Feb 07 jari 452         }//m
2 26 Feb 07 jari 453       }//f
2 26 Feb 07 jari 454       
2 26 Feb 07 jari 455       DecimalFormat df = new DecimalFormat( "###.#" );
2 26 Feb 07 jari 456       
2 26 Feb 07 jari 457       double mistakeAvg = ( double ) iMistake / ( double ) iResults;
2 26 Feb 07 jari 458       double numGenesAvg = ( double ) iNumGenes / ( double ) iResults;
2 26 Feb 07 jari 459       //String sMistake = df.format( mistakeAvg ) + " / " + Integer.toString( iResults );
2 26 Feb 07 jari 460       String sMistake = df.format( mistakeAvg );
2 26 Feb 07 jari 461       String sNumGenes = df.format( numGenesAvg );
2 26 Feb 07 jari 462       String sDelta = df.format( delta );
2 26 Feb 07 jari 463       String sRho = df.format( rho );
2 26 Feb 07 jari 464       
2 26 Feb 07 jari 465       USCRow row = new USCRow( sMistake, sNumGenes, sDelta, sRho );
2 26 Feb 07 jari 466       bg.add( row.getButton() );
2 26 Feb 07 jari 467       vReturn.add( row );
2 26 Feb 07 jari 468     }//r
2 26 Feb 07 jari 469     
2 26 Feb 07 jari 470     return vReturn;
2 26 Feb 07 jari 471   }//createRows()
2 26 Feb 07 jari 472   private Vector createRows( USCXValResult xValResults ) {
2 26 Feb 07 jari 473     Vector vReturn = new Vector();
2 26 Feb 07 jari 474     
2 26 Feb 07 jari 475     ButtonGroup bg = new ButtonGroup();
2 26 Feb 07 jari 476     
2 26 Feb 07 jari 477     int resultKount = xValResults.getFoldResult( 0 )[ 0 ].getResultKount();
2 26 Feb 07 jari 478     
2 26 Feb 07 jari 479     //loop through the delta/rho combos
2 26 Feb 07 jari 480     for( int r = 0; r < resultKount; r ++ ) {
2 26 Feb 07 jari 481       int iCorrect = 0;
2 26 Feb 07 jari 482       int iMistake = 0;
2 26 Feb 07 jari 483       int iTotalCalls = 0;
2 26 Feb 07 jari 484       int iTotalNumGenes = 0;
2 26 Feb 07 jari 485       int iGenesDenom = 0;
2 26 Feb 07 jari 486       boolean hasResult = false;
2 26 Feb 07 jari 487       double delta = 0;
2 26 Feb 07 jari 488       double rho = 0;
2 26 Feb 07 jari 489       
2 26 Feb 07 jari 490       //loop through the xValRuns
2 26 Feb 07 jari 491       for( int x = 0; x < xValResults.getXValKount(); x ++ ) {
2 26 Feb 07 jari 492         //get the USCFoldResult[] for this xValRun
2 26 Feb 07 jari 493         USCFoldResult[] foldResultArray = xValResults.getFoldResult( x );
2 26 Feb 07 jari 494         
2 26 Feb 07 jari 495         //loop through the folds in each xValRun
2 26 Feb 07 jari 496         for( int f = 0; f < foldResultArray.length; f ++ ) {
2 26 Feb 07 jari 497           USCFoldResult foldResult = foldResultArray[ f ];
2 26 Feb 07 jari 498           
2 26 Feb 07 jari 499           //see if this fold produced a result
2 26 Feb 07 jari 500           if( foldResult.hasResult( r ) ) {
2 26 Feb 07 jari 501             //if it hasn't already been marked as true, mark it as true
2 26 Feb 07 jari 502             if( ! hasResult ) { hasResult = true; }
2 26 Feb 07 jari 503             
2 26 Feb 07 jari 504             //get the d/r result for this fold
2 26 Feb 07 jari 505             USCResult result = foldResult.getResult( r );
2 26 Feb 07 jari 506             delta = result.getDelta();
2 26 Feb 07 jari 507             rho = result.getRho();
2 26 Feb 07 jari 508             
2 26 Feb 07 jari 509             //keep track of total num genes for avg later
2 26 Feb 07 jari 510             iTotalNumGenes += result.getNumGenesUsed();
2 26 Feb 07 jari 511             iGenesDenom ++;
2 26 Feb 07 jari 512             
2 26 Feb 07 jari 513             //get the scores of the hybs of interest
2 26 Feb 07 jari 514             double[][] dScores = result.getDiscScores();
2 26 Feb 07 jari 515             USCHyb[] testArray = foldResult.getTestArray();
2 26 Feb 07 jari 516             
2 26 Feb 07 jari 517             //test the testHybs to see if the assignments were indeed correct
2 26 Feb 07 jari 518             for( int h = 0; h < dScores.length; h ++ ) {
2 26 Feb 07 jari 519               double dMin = 99999999;
2 26 Feb 07 jari 520                int iMin = 0;
2 26 Feb 07 jari 521                
2 26 Feb 07 jari 522                //loop through disc scores to find the min
2 26 Feb 07 jari 523                for( int c = 0; c < dScores[ h ].length; c ++ ) {
2 26 Feb 07 jari 524                  if( dScores[ h ][ c ] < dMin ) {
2 26 Feb 07 jari 525                    dMin = dScores[ h ][ c ];
2 26 Feb 07 jari 526                    iMin = c;
2 26 Feb 07 jari 527                  }
2 26 Feb 07 jari 528                }//end c
2 26 Feb 07 jari 529                
2 26 Feb 07 jari 530                //validate the assignment
2 26 Feb 07 jari 531                if( testArray[ h ].getUniqueLabelIndex() == iMin ) {
2 26 Feb 07 jari 532                  iCorrect ++;
2 26 Feb 07 jari 533                  iTotalCalls ++;
2 26 Feb 07 jari 534                } else {
2 26 Feb 07 jari 535                  iMistake ++;
2 26 Feb 07 jari 536                  iTotalCalls ++;
2 26 Feb 07 jari 537                }
2 26 Feb 07 jari 538             }//end h
2 26 Feb 07 jari 539           }//end if
2 26 Feb 07 jari 540         }//end f
2 26 Feb 07 jari 541       }//end x
2 26 Feb 07 jari 542       
2 26 Feb 07 jari 543       //avg the number of genes used
2 26 Feb 07 jari 544       double fNumGenes;
2 26 Feb 07 jari 545       if( iGenesDenom > 0 ) {
2 26 Feb 07 jari 546         fNumGenes = ( double ) iTotalNumGenes / ( double ) iGenesDenom;
2 26 Feb 07 jari 547       } else {
2 26 Feb 07 jari 548         fNumGenes = 0.0f;
2 26 Feb 07 jari 549       }
2 26 Feb 07 jari 550       
2 26 Feb 07 jari 551       //compile result data
2 26 Feb 07 jari 552       if( hasResult ) {
2 26 Feb 07 jari 553         USCRow row = new USCRow( iMistake, iTotalCalls, fNumGenes, delta, rho );
2 26 Feb 07 jari 554         bg.add( row.getButton() );
2 26 Feb 07 jari 555         vReturn.add( row );
2 26 Feb 07 jari 556         
2 26 Feb 07 jari 557         //set the default as selected
2 26 Feb 07 jari 558         if( vReturn.size() == 1 ) {
2 26 Feb 07 jari 559           row.getButton().setSelected( true );
2 26 Feb 07 jari 560         }//end if
2 26 Feb 07 jari 561       }//end if
2 26 Feb 07 jari 562     }//end r
2 26 Feb 07 jari 563     
2 26 Feb 07 jari 564     return vReturn;
2 26 Feb 07 jari 565   }//createRows()
2 26 Feb 07 jari 566   
2 26 Feb 07 jari 567   
2 26 Feb 07 jari 568   /**
2 26 Feb 07 jari 569    * Displays a dialog box with a message
2 26 Feb 07 jari 570    * @param message
2 26 Feb 07 jari 571    */
2 26 Feb 07 jari 572   public void error( String message ) {
2 26 Feb 07 jari 573     JOptionPane.showMessageDialog( this, message, "Input Error", JOptionPane.ERROR_MESSAGE );
2 26 Feb 07 jari 574   }//end error()
2 26 Feb 07 jari 575   
2 26 Feb 07 jari 576     
2 26 Feb 07 jari 577   /**
2 26 Feb 07 jari 578    * Shows this AlgorithmDialog
2 26 Feb 07 jari 579    * @return  
2 26 Feb 07 jari 580    */
2 26 Feb 07 jari 581   public int showModal() {
2 26 Feb 07 jari 582     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
2 26 Feb 07 jari 583     setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2);
2 26 Feb 07 jari 584     show();
2 26 Feb 07 jari 585     return buttonPushed;
2 26 Feb 07 jari 586   }//end showModal()
2 26 Feb 07 jari 587   
2 26 Feb 07 jari 588   
2 26 Feb 07 jari 589   /**
2 26 Feb 07 jari 590    * 
2 26 Feb 07 jari 591    * @author vu
2 26 Feb 07 jari 592    */
2 26 Feb 07 jari 593   private class RadioButtonRenderer implements TableCellRenderer {
2 26 Feb 07 jari 594     public Component getTableCellRendererComponent(JTable table, Object value,
2 26 Feb 07 jari 595     boolean isSelected, boolean hasFocus, int row, int column) {
2 26 Feb 07 jari 596       if (value==null) return null;
2 26 Feb 07 jari 597         return (Component)value;
2 26 Feb 07 jari 598     }
2 26 Feb 07 jari 599   }//end class
2 26 Feb 07 jari 600   
2 26 Feb 07 jari 601   
2 26 Feb 07 jari 602   /**
2 26 Feb 07 jari 603    * 
2 26 Feb 07 jari 604    * @author vu
2 26 Feb 07 jari 605    */
2 26 Feb 07 jari 606   private class RadioButtonEditor extends DefaultCellEditor implements ItemListener {
2 26 Feb 07 jari 607     private JRadioButton button;
2 26 Feb 07 jari 608
2 26 Feb 07 jari 609     public RadioButtonEditor(JCheckBox checkBox) {
2 26 Feb 07 jari 610       super(checkBox);
2 26 Feb 07 jari 611     }
2 26 Feb 07 jari 612
2 26 Feb 07 jari 613     public Component getTableCellEditorComponent( JTable table, Object value, 
2 26 Feb 07 jari 614     boolean isSelected, int row, int column) {
2 26 Feb 07 jari 615       if (value == null)
2 26 Feb 07 jari 616         return null;
2 26 Feb 07 jari 617       button = (JRadioButton) value;
2 26 Feb 07 jari 618       button.addItemListener(this);
2 26 Feb 07 jari 619       return (Component) value;
2 26 Feb 07 jari 620     }
2 26 Feb 07 jari 621
2 26 Feb 07 jari 622     public Object getCellEditorValue() {
2 26 Feb 07 jari 623       button.removeItemListener(this);
2 26 Feb 07 jari 624       return button;
2 26 Feb 07 jari 625     }
2 26 Feb 07 jari 626
2 26 Feb 07 jari 627     public void itemStateChanged(ItemEvent e) {
2 26 Feb 07 jari 628       super.fireEditingStopped();
2 26 Feb 07 jari 629     }
2 26 Feb 07 jari 630   }//end class
2 26 Feb 07 jari 631   
2 26 Feb 07 jari 632     
2 26 Feb 07 jari 633   /**
2 26 Feb 07 jari 634    * The class to listen to the dialog and check boxes items events.
2 26 Feb 07 jari 635    */
2 26 Feb 07 jari 636   private class Listener extends DialogListener implements ItemListener {
2 26 Feb 07 jari 637         
2 26 Feb 07 jari 638     public void actionPerformed(ActionEvent e) {
2 26 Feb 07 jari 639       String command = e.getActionCommand();
2 26 Feb 07 jari 640       if (command.equals("ok-command")) {
2 26 Feb 07 jari 641         buttonPushed = JOptionPane.OK_OPTION;
2 26 Feb 07 jari 642         dispose();
2 26 Feb 07 jari 643       } else if (command.equals("cancel-command")) {
2 26 Feb 07 jari 644         buttonPushed = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 645         dispose();
2 26 Feb 07 jari 646       } else if (command.equals("reset-command")) {
2 26 Feb 07 jari 647         //resetControls();
2 26 Feb 07 jari 648         buttonPushed = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 649         return;
2 26 Feb 07 jari 650       } else if (command.equals("info-command")) {
2 26 Feb 07 jari 651         HelpWindow hw = new HelpWindow(USCDeltaDialog.this, "USC Delta Dialog");
2 26 Feb 07 jari 652         buttonPushed = JOptionPane.CANCEL_OPTION;
2 26 Feb 07 jari 653         if(hw.getWindowContent()){
2 26 Feb 07 jari 654           hw.setSize(450,600);
2 26 Feb 07 jari 655           hw.setLocation();
2 26 Feb 07 jari 656           hw.show();
2 26 Feb 07 jari 657           return;
2 26 Feb 07 jari 658         } else {
2 26 Feb 07 jari 659           hw.setVisible(false);
2 26 Feb 07 jari 660           hw.dispose();
2 26 Feb 07 jari 661           return;
2 26 Feb 07 jari 662         }
2 26 Feb 07 jari 663       }
2 26 Feb 07 jari 664       //dispose();
2 26 Feb 07 jari 665     }//end actionPerformed()
2 26 Feb 07 jari 666         
2 26 Feb 07 jari 667     public void itemStateChanged(ItemEvent e) {
2 26 Feb 07 jari 668       //okButton.setEnabled(genes_box.isSelected() || cluster_box.isSelected());
2 26 Feb 07 jari 669     }
2 26 Feb 07 jari 670         
2 26 Feb 07 jari 671     public void windowClosing(WindowEvent e) {
2 26 Feb 07 jari 672       buttonPushed = JOptionPane.CLOSED_OPTION;
2 26 Feb 07 jari 673       dispose();
2 26 Feb 07 jari 674     }
2 26 Feb 07 jari 675   }//end internal Listener class
2 26 Feb 07 jari 676   
2 26 Feb 07 jari 677   
2 26 Feb 07 jari 678   /**
2 26 Feb 07 jari 679    * 
2 26 Feb 07 jari 680    * @author vu
2 26 Feb 07 jari 681    */
2 26 Feb 07 jari 682   private class ColumnHeaderToolTips extends MouseMotionAdapter {
2 26 Feb 07 jari 683     // Current column whose tooltip is being displayed.
2 26 Feb 07 jari 684     // This variable is used to minimize the calls to setToolTipText().
2 26 Feb 07 jari 685     TableColumn curCol;
2 26 Feb 07 jari 686
2 26 Feb 07 jari 687     // Maps TableColumn objects to tooltips
2 26 Feb 07 jari 688     Map tips = new HashMap();
2 26 Feb 07 jari 689
2 26 Feb 07 jari 690     // If tooltip is null, removes any tooltip text.
2 26 Feb 07 jari 691     public void setToolTip(TableColumn col, String tooltip) {
2 26 Feb 07 jari 692       if (tooltip == null) {
2 26 Feb 07 jari 693         tips.remove(col);
2 26 Feb 07 jari 694       } else {
2 26 Feb 07 jari 695         tips.put(col, tooltip);
2 26 Feb 07 jari 696       }
2 26 Feb 07 jari 697     }//end setToolTip
2 26 Feb 07 jari 698
2 26 Feb 07 jari 699     public void mouseMoved(MouseEvent evt) {
2 26 Feb 07 jari 700       TableColumn col = null;
2 26 Feb 07 jari 701       JTableHeader header = (JTableHeader) evt.getSource();
2 26 Feb 07 jari 702       JTable table = header.getTable();
2 26 Feb 07 jari 703       TableColumnModel colModel = table.getColumnModel();
2 26 Feb 07 jari 704       int vColIndex = colModel.getColumnIndexAtX(evt.getX());
2 26 Feb 07 jari 705
2 26 Feb 07 jari 706       // Return if not clicked on any column header
2 26 Feb 07 jari 707       if (vColIndex >= 0) {
2 26 Feb 07 jari 708         col = colModel.getColumn(vColIndex);
2 26 Feb 07 jari 709       }
2 26 Feb 07 jari 710
2 26 Feb 07 jari 711       if (col != curCol) {
2 26 Feb 07 jari 712         header.setToolTipText((String) tips.get(col));
2 26 Feb 07 jari 713         curCol = col;
2 26 Feb 07 jari 714       }
2 26 Feb 07 jari 715     }
2 26 Feb 07 jari 716   }//end class
2 26 Feb 07 jari 717
2 26 Feb 07 jari 718   //--------------------------------------Getters & Setters----------------------------------
2 26 Feb 07 jari 719   public USCRow getSelectedRow() {
2 26 Feb 07 jari 720     USCRow toReturn = null;
2 26 Feb 07 jari 721     
2 26 Feb 07 jari 722     int selectedIndex = 0;
2 26 Feb 07 jari 723     for( int i = 0; i < this.jt.getRowCount(); i ++ ) {
2 26 Feb 07 jari 724       TableModel dm = this.jt.getModel();
2 26 Feb 07 jari 725       JRadioButton rButton = ( JRadioButton ) dm.getValueAt( i, 0 );
2 26 Feb 07 jari 726       
2 26 Feb 07 jari 727       if( rButton.isSelected() ) {
2 26 Feb 07 jari 728         //find the USCRow object of this selected JRadioButton
2 26 Feb 07 jari 729         for( int r = 0; r < this.vRow.size(); r ++ ) {
2 26 Feb 07 jari 730           USCRow row = ( USCRow ) this.vRow.elementAt( r );
2 26 Feb 07 jari 731           if( rButton == row.getButton() ) {
2 26 Feb 07 jari 732             toReturn = row;
2 26 Feb 07 jari 733           }
2 26 Feb 07 jari 734         }//end r
2 26 Feb 07 jari 735         
2 26 Feb 07 jari 736         break;
2 26 Feb 07 jari 737       }
2 26 Feb 07 jari 738     }
2 26 Feb 07 jari 739     return toReturn;
2 26 Feb 07 jari 740   }//end getSelectedRow()
2 26 Feb 07 jari 741   public boolean saveTraining() {
2 26 Feb 07 jari 742     return this.saveBox.isSelected();
2 26 Feb 07 jari 743   }
2 26 Feb 07 jari 744 }//end class