mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/helpers/TableViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * TableViewer.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Created on September 5, 2003, 10:17 AM
2 26 Feb 07 jari 9  */
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 package org.tigr.microarray.mev.cluster.gui.helpers;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import java.awt.Color;
2 26 Feb 07 jari 14 import java.awt.Component;
2 26 Feb 07 jari 15 import java.beans.Expression;
2 26 Feb 07 jari 16 import java.awt.Font;
2 26 Feb 07 jari 17 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 18 import java.awt.GridBagLayout;
2 26 Feb 07 jari 19 import java.awt.Insets;
2 26 Feb 07 jari 20 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 21 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 22 import java.awt.image.BufferedImage;
2 26 Feb 07 jari 23 import java.util.Arrays;
2 26 Feb 07 jari 24
2 26 Feb 07 jari 25 import javax.swing.JComponent;
2 26 Feb 07 jari 26 import javax.swing.JFrame;
2 26 Feb 07 jari 27 import javax.swing.JLabel;
2 26 Feb 07 jari 28 import javax.swing.JPanel;
2 26 Feb 07 jari 29 import javax.swing.JScrollPane;
2 26 Feb 07 jari 30 import javax.swing.JTable;
2 26 Feb 07 jari 31 import javax.swing.JTextArea;
2 26 Feb 07 jari 32 import javax.swing.table.AbstractTableModel;
2 26 Feb 07 jari 33 import javax.swing.table.DefaultTableCellRenderer;
2 26 Feb 07 jari 34 import javax.swing.table.JTableHeader;
2 26 Feb 07 jari 35 import javax.swing.table.TableModel;
2 26 Feb 07 jari 36
2 26 Feb 07 jari 37 import org.tigr.microarray.mev.cluster.gui.Experiment;
2 26 Feb 07 jari 38 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 39 import org.tigr.microarray.mev.cluster.gui.IDisplayMenu;
2 26 Feb 07 jari 40 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 41 import org.tigr.microarray.mev.cluster.gui.IViewer;
2 26 Feb 07 jari 42 /** The TableViewer class is provided as a JPanel extention to be used
2 26 Feb 07 jari 43  * as a means of presenting tabular data.  The TableViewer can be added
2 26 Feb 07 jari 44  * to any component and can recieve a variety of data types.
2 26 Feb 07 jari 45  * The JTable, TableModel, and JTableHeader are all returned by methods
2 26 Feb 07 jari 46  * so that interaction can be direct.
2 26 Feb 07 jari 47  * @author braisted
2 26 Feb 07 jari 48  */
2 26 Feb 07 jari 49
2 26 Feb 07 jari 50
2 26 Feb 07 jari 51 public class TableViewer extends JPanel implements IViewer {
2 26 Feb 07 jari 52     
2 26 Feb 07 jari 53     protected JTable table;
2 26 Feb 07 jari 54     protected TableModel model;
2 26 Feb 07 jari 55     protected JScrollPane pane;
2 26 Feb 07 jari 56     protected IFramework framework;
2 26 Feb 07 jari 57     private int exptID = 0;
2 26 Feb 07 jari 58     
2 26 Feb 07 jari 59     //EH
2 26 Feb 07 jari 60     Object[][] data;
2 26 Feb 07 jari 61     String[] headerNames;
2 26 Feb 07 jari 62     
2 26 Feb 07 jari 63     /** Creates a new instance of TableViewer */
2 26 Feb 07 jari 64     public TableViewer() { }
2 26 Feb 07 jari 65     
2 26 Feb 07 jari 66     /** Creates a new TableViewer with header names and data.
2 26 Feb 07 jari 67      * @param headerNames Header name strings.
2 26 Feb 07 jari 68      * @param data table data
2 26 Feb 07 jari 69      */    
2 26 Feb 07 jari 70     public TableViewer(String [] headerNames, Object [][] data) {
2 26 Feb 07 jari 71       this.data = data;
2 26 Feb 07 jari 72       this.headerNames = headerNames;
2 26 Feb 07 jari 73         model = new DefaultViewerTableModel(headerNames, data);
2 26 Feb 07 jari 74         
2 26 Feb 07 jari 75         table = new JTable(model);
2 26 Feb 07 jari 76         table.getTableHeader().addMouseListener(new TableHeaderMouseListener());
2 26 Feb 07 jari 77         
2 26 Feb 07 jari 78         pane = new JScrollPane(table);
2 26 Feb 07 jari 79       
2 26 Feb 07 jari 80         this.setLayout(new GridBagLayout());
2 26 Feb 07 jari 81         add(pane, new GridBagConstraints(0,0,1,1,1.0,1.0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0), 0,0));
2 26 Feb 07 jari 82     }
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     public Expression getExpression(){
2 26 Feb 07 jari 85       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 86           new Object[]{headerNames, data});
2 26 Feb 07 jari 87     }
2 26 Feb 07 jari 88     public void setExperiment(Experiment e){}
2 26 Feb 07 jari 89     
2 26 Feb 07 jari 90     /** Allows the substitution of a specific table model.
2 26 Feb 07 jari 91      * @param model This model replaces the TableViewer's default TableModel.
2 26 Feb 07 jari 92      */    
2 26 Feb 07 jari 93     public void setTableModel(TableModel model){
2 26 Feb 07 jari 94         this.model = model;
2 26 Feb 07 jari 95         table.setModel(model);
2 26 Feb 07 jari 96     }
2 26 Feb 07 jari 97     
2 26 Feb 07 jari 98     /** Returns the table.
2 26 Feb 07 jari 99      * @return table component
2 26 Feb 07 jari 100      */    
2 26 Feb 07 jari 101     public JTable getTable(){
2 26 Feb 07 jari 102         return this.table;
2 26 Feb 07 jari 103     }
2 26 Feb 07 jari 104     
2 26 Feb 07 jari 105     /** Returns the active TableModel.
2 26 Feb 07 jari 106      * @return The tables data model
2 26 Feb 07 jari 107      */    
2 26 Feb 07 jari 108     public TableModel getTableModel(){
2 26 Feb 07 jari 109         return this.table.getModel();
2 26 Feb 07 jari 110     }
2 26 Feb 07 jari 111     
2 26 Feb 07 jari 112     /** Returns the table's header component
2 26 Feb 07 jari 113      * @return table header
2 26 Feb 07 jari 114      */    
2 26 Feb 07 jari 115     public JTableHeader getTableHeader(){
2 26 Feb 07 jari 116         return this.table.getTableHeader();
2 26 Feb 07 jari 117     }
2 26 Feb 07 jari 118     
2 26 Feb 07 jari 119     /** Indicates that the indexed column should be set to numerical
2 26 Feb 07 jari 120      * regardles of the object type.  This will assist in proper sorting
2 26 Feb 07 jari 121      * if a numerical column is represented by Strings.
2 26 Feb 07 jari 122      * (By default columns are not numerical)
2 26 Feb 07 jari 123      * @param columnIndex index to the table column
2 26 Feb 07 jari 124      * @param setting sets as numerical.
2 26 Feb 07 jari 125      */    
2 26 Feb 07 jari 126     public void setNumerical(int columnIndex, boolean setting){
2 26 Feb 07 jari 127         if(this.model instanceof DefaultViewerTableModel)
2 26 Feb 07 jari 128             ((DefaultViewerTableModel)this.model).setNumerical(columnIndex, setting);
2 26 Feb 07 jari 129     }
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     public int getSelectedRow(){
2 26 Feb 07 jari 132         int index = table.getSelectedRow();
2 26 Feb 07 jari 133         if(index < 0)
2 26 Feb 07 jari 134             index = -1;
2 26 Feb 07 jari 135         else
2 26 Feb 07 jari 136             index = ((DefaultViewerTableModel) this.model).getRow(index);
2 26 Feb 07 jari 137         return index;        
2 26 Feb 07 jari 138     }
2 26 Feb 07 jari 139     
2 26 Feb 07 jari 140     
2 26 Feb 07 jari 141     /**
2 26 Feb 07 jari 142      *  Internal Classes
2 26 Feb 07 jari 143      *
2 26 Feb 07 jari 144      */    
2 26 Feb 07 jari 145     public class DefaultViewerTableModel extends AbstractTableModel {
2 26 Feb 07 jari 146         String[] columnNames;
2 26 Feb 07 jari 147         Object[][] tableData;
2 26 Feb 07 jari 148         boolean [] numerical;
2 26 Feb 07 jari 149         Row [] rows;
2 26 Feb 07 jari 150         int colToSort = 0;
2 26 Feb 07 jari 151         boolean ascending = false;
2 26 Feb 07 jari 152         
2 26 Feb 07 jari 153         /** This inner class is used to support basic manipulation of the table.
2 26 Feb 07 jari 154          * The table helps to support ascending and descending row sorting based
2 26 Feb 07 jari 155          * on numerical or alphabetical column contents.
2 26 Feb 07 jari 156          * @param headerNames header names
2 26 Feb 07 jari 157          * @param data data matrix
2 26 Feb 07 jari 158          */        
2 26 Feb 07 jari 159         public DefaultViewerTableModel(String [] headerNames, Object [][] data){
2 26 Feb 07 jari 160             columnNames = headerNames;
2 26 Feb 07 jari 161             tableData = data;
2 26 Feb 07 jari 162             numerical = new boolean[headerNames.length];
2 26 Feb 07 jari 163             rows = new Row[data.length];
2 26 Feb 07 jari 164             for(int i = 0; i < rows.length; i++){
2 26 Feb 07 jari 165                 rows[i] = new Row();
2 26 Feb 07 jari 166                 rows[i].index = i;
2 26 Feb 07 jari 167             }
2 26 Feb 07 jari 168         }
2 26 Feb 07 jari 169         
2 26 Feb 07 jari 170         /** Sets column as numerical for sorting.
2 26 Feb 07 jari 171          * @param col column index
2 26 Feb 07 jari 172          * @param numericalBool sets as numerical or not numerical
2 26 Feb 07 jari 173          */        
2 26 Feb 07 jari 174         public void setNumerical(int col, boolean numericalBool){
2 26 Feb 07 jari 175             if(col > -1 && col < numerical.length)
2 26 Feb 07 jari 176                 numerical[col] = numericalBool;
2 26 Feb 07 jari 177         }
2 26 Feb 07 jari 178         
2 26 Feb 07 jari 179         public int getColumnCount() {
2 26 Feb 07 jari 180             return columnNames.length;
2 26 Feb 07 jari 181         }
2 26 Feb 07 jari 182         
2 26 Feb 07 jari 183         public int getRowCount() {
2 26 Feb 07 jari 184             if(tableData == null)
2 26 Feb 07 jari 185                 return 0;
2 26 Feb 07 jari 186             else
2 26 Feb 07 jari 187                 return tableData.length;
2 26 Feb 07 jari 188         }
2 26 Feb 07 jari 189         
2 26 Feb 07 jari 190         public Object getValueAt(int param, int param1) {
2 26 Feb 07 jari 191             if(tableData != null && param < tableData.length && param1 < tableData[param].length)
2 26 Feb 07 jari 192                 return tableData[rows[param].index][param1];
2 26 Feb 07 jari 193             return null;
2 26 Feb 07 jari 194         }
2 26 Feb 07 jari 195         
2 26 Feb 07 jari 196         public String getColumnName(int index){
2 26 Feb 07 jari 197             return columnNames[index];
2 26 Feb 07 jari 198         }
2 26 Feb 07 jari 199         
2 26 Feb 07 jari 200         private boolean isNumerical(int col){
2 26 Feb 07 jari 201             return numerical[col];
2 26 Feb 07 jari 202         }
2 26 Feb 07 jari 203         
2 26 Feb 07 jari 204         public void sort(int col){
2 26 Feb 07 jari 205             ascending = !ascending;
2 26 Feb 07 jari 206             colToSort = col;
2 26 Feb 07 jari 207             Arrays.sort(rows);
2 26 Feb 07 jari 208             fireTableDataChanged();
2 26 Feb 07 jari 209         }
2 26 Feb 07 jari 210         
2 26 Feb 07 jari 211         public int getRow(int tableRow){
2 26 Feb 07 jari 212             return rows[tableRow].index;
2 26 Feb 07 jari 213         }
2 26 Feb 07 jari 214        
2 26 Feb 07 jari 215         
2 26 Feb 07 jari 216         private class Row implements Comparable, java.io.Serializable {
2 26 Feb 07 jari 217             public int index;
2 26 Feb 07 jari 218             private String myString, otherString;
2 26 Feb 07 jari 219             
2 26 Feb 07 jari 220             public int compareTo(Object other){
2 26 Feb 07 jari 221                 if(ascending)
2 26 Feb 07 jari 222                     return compareToOther(other);
2 26 Feb 07 jari 223                 return compareToOther(other)*(-1);
2 26 Feb 07 jari 224             }
2 26 Feb 07 jari 225             
2 26 Feb 07 jari 226             public int compareToOther(Object other){
2 26 Feb 07 jari 227                 Row otherRow = (Row)other;
2 26 Feb 07 jari 228                 Object myObject = tableData[index][colToSort];
2 26 Feb 07 jari 229                 Object otherObject = tableData[otherRow.index][colToSort];
2 26 Feb 07 jari 230                 if( myObject instanceof Comparable ) {
2 26 Feb 07 jari 231                     if(isNumerical(colToSort)){  //catch string designation of a number
2 26 Feb 07 jari 232                         if(myObject instanceof String){
2 26 Feb 07 jari 233                             Float myFloat = new Float((String)myObject);
2 26 Feb 07 jari 234                             Float otherFloat = new Float((String)otherObject);
2 26 Feb 07 jari 235                             return myFloat.compareTo(otherFloat);
2 26 Feb 07 jari 236                         }
2 26 Feb 07 jari 237                     }
2 26 Feb 07 jari 238                     return ((Comparable)myObject).compareTo(otherObject);
2 26 Feb 07 jari 239                 }
2 26 Feb 07 jari 240                 if(myObject instanceof JLabel){
2 26 Feb 07 jari 241                     myString = ((JLabel)(myObject)).getText();
2 26 Feb 07 jari 242                     otherString = ((JLabel)(otherObject)).getText();
2 26 Feb 07 jari 243                     return myString.compareTo(otherString);
2 26 Feb 07 jari 244                 }
2 26 Feb 07 jari 245                 else return index - otherRow.index;
2 26 Feb 07 jari 246             }
2 26 Feb 07 jari 247         }
2 26 Feb 07 jari 248         
2 26 Feb 07 jari 249     }
2 26 Feb 07 jari 250     
2 26 Feb 07 jari 251     
2 26 Feb 07 jari 252     
2 26 Feb 07 jari 253     
2 26 Feb 07 jari 254     public class CellRenderer extends DefaultTableCellRenderer {
2 26 Feb 07 jari 255         
2 26 Feb 07 jari 256         JPanel colorPanel = new JPanel();
2 26 Feb 07 jari 257         JLabel label;
2 26 Feb 07 jari 258         JTextArea textArea;
2 26 Feb 07 jari 259         
2 26 Feb 07 jari 260         /** Renders basic data input types JLabel, Color,
2 26 Feb 07 jari 261          */        
2 26 Feb 07 jari 262         public Component getTableCellRendererComponent(JTable jTable, Object obj, boolean param, boolean param3, int row, int col) {
2 26 Feb 07 jari 263             if(obj instanceof Color){
2 26 Feb 07 jari 264                 colorPanel.setBackground((Color)obj);
2 26 Feb 07 jari 265                 return colorPanel;
2 26 Feb 07 jari 266             } else if(obj instanceof JLabel){
2 26 Feb 07 jari 267                 label = (JLabel)obj;
2 26 Feb 07 jari 268                 label.setOpaque(true);
2 26 Feb 07 jari 269                 label.setFont(new Font("Arial", Font.PLAIN, 12));
2 26 Feb 07 jari 270                 label.setBackground(new Color(225, 225, 225));
2 26 Feb 07 jari 271                 label.setForeground(Color.black);
2 26 Feb 07 jari 272                 label.setHorizontalAlignment(JLabel.CENTER);
2 26 Feb 07 jari 273                 if(table.isRowSelected(row))
2 26 Feb 07 jari 274                     label.setBackground(table.getSelectionBackground());
2 26 Feb 07 jari 275                 return label;
2 26 Feb 07 jari 276             } else if(obj instanceof JTextArea){
2 26 Feb 07 jari 277                 textArea = (JTextArea)obj;
2 26 Feb 07 jari 278                 if(table.isRowSelected(row))
2 26 Feb 07 jari 279                     textArea.setBackground(table.getSelectionBackground());
2 26 Feb 07 jari 280                 return textArea;
2 26 Feb 07 jari 281             }
2 26 Feb 07 jari 282            colorPanel.setBackground(Color.white);
2 26 Feb 07 jari 283            return colorPanel;
2 26 Feb 07 jari 284         }
2 26 Feb 07 jari 285     }
2 26 Feb 07 jari 286         
2 26 Feb 07 jari 287
2 26 Feb 07 jari 288     
2 26 Feb 07 jari 289     public static void main(String [] args){
2 26 Feb 07 jari 290         String [] headers = new String[3];
2 26 Feb 07 jari 291         headers[0] = "Gene";
2 26 Feb 07 jari 292         headers[1] = "GenBank #";
2 26 Feb 07 jari 293         headers[2] = "Common Name";
2 26 Feb 07 jari 294         
2 26 Feb 07 jari 295         Object [][] data = new Object[3][3];
2 26 Feb 07 jari 296         for(int i = 0; i < data.length ; i++)
2 26 Feb 07 jari 297             for(int j = 0; j < data[0].length; j++)
2 26 Feb 07 jari 298                 if(i == 1)
2 26 Feb 07 jari 299                     data[i][j] = "1000";
2 26 Feb 07 jari 300                 else
2 26 Feb 07 jari 301                     data[i][j] = Integer.toString(i*j+j);
2 26 Feb 07 jari 302         
2 26 Feb 07 jari 303         TableViewer tv = new TableViewer(headers, data);
2 26 Feb 07 jari 304         
2 26 Feb 07 jari 305         tv.setNumerical(0, true);
2 26 Feb 07 jari 306         tv.setNumerical(1, true);
2 26 Feb 07 jari 307         tv.setNumerical(2, false);
2 26 Feb 07 jari 308         JFrame frame = new JFrame();
2 26 Feb 07 jari 309         frame.getContentPane().add(tv);
2 26 Feb 07 jari 310         frame.setSize(100,100);
2 26 Feb 07 jari 311         frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
2 26 Feb 07 jari 312         frame.setVisible(true);
2 26 Feb 07 jari 313     }
2 26 Feb 07 jari 314     
2 26 Feb 07 jari 315     
2 26 Feb 07 jari 316     public class TableHeaderMouseListener extends MouseAdapter{
2 26 Feb 07 jari 317         
2 26 Feb 07 jari 318         public void mouseClicked(MouseEvent evt) {
2 26 Feb 07 jari 319             if(evt.getModifiers() == MouseEvent.BUTTON1_MASK && evt.getClickCount() > 1){
2 26 Feb 07 jari 320                 if(model instanceof DefaultViewerTableModel){
2 26 Feb 07 jari 321                     JTableHeader header = (JTableHeader)evt.getSource();
2 26 Feb 07 jari 322                     int tableCol = header.columnAtPoint(evt.getPoint());
2 26 Feb 07 jari 323                     int modelCol = table.convertColumnIndexToModel(tableCol);
2 26 Feb 07 jari 324                     ((DefaultViewerTableModel)model).sort(modelCol);
2 26 Feb 07 jari 325                 }
2 26 Feb 07 jari 326             }
2 26 Feb 07 jari 327         }
2 26 Feb 07 jari 328     }
2 26 Feb 07 jari 329     
2 26 Feb 07 jari 330     
2 26 Feb 07 jari 331     /**
2 26 Feb 07 jari 332      *      IViewer implementation Methods (Default Implementation)
2 26 Feb 07 jari 333      *
2 26 Feb 07 jari 334      */
2 26 Feb 07 jari 335     
2 26 Feb 07 jari 336     
2 26 Feb 07 jari 337     /** Returns a component to be inserted into scroll pane view port.
2 26 Feb 07 jari 338      * @return content component (JTable)
2 26 Feb 07 jari 339      */
2 26 Feb 07 jari 340     public JComponent getContentComponent() {
2 26 Feb 07 jari 341         return this.table;
2 26 Feb 07 jari 342     }
2 26 Feb 07 jari 343     
2 26 Feb 07 jari 344     /** Returns a component to be inserted into scroll pane header.
2 26 Feb 07 jari 345      * @return table header component.
2 26 Feb 07 jari 346      */
2 26 Feb 07 jari 347     public JComponent getHeaderComponent() {
2 26 Feb 07 jari 348         return table.getTableHeader();
2 26 Feb 07 jari 349     }
2 26 Feb 07 jari 350     
2 26 Feb 07 jari 351     /** Invoked by the framework to save or to print viewer image.
2 26 Feb 07 jari 352      * @return Image or Null
2 26 Feb 07 jari 353      */
2 26 Feb 07 jari 354     public BufferedImage getImage() {
2 26 Feb 07 jari 355         return null;
2 26 Feb 07 jari 356     }
2 26 Feb 07 jari 357     
2 26 Feb 07 jari 358     /** Returns a component to be inserted into the scroll pane row header
2 26 Feb 07 jari 359      * @return Row header component or null
2 26 Feb 07 jari 360      */
2 26 Feb 07 jari 361     public JComponent getRowHeaderComponent() {
2 26 Feb 07 jari 362         return null;
2 26 Feb 07 jari 363     }
2 26 Feb 07 jari 364     
2 26 Feb 07 jari 365     /** Invoked when the framework is going to be closed.
2 26 Feb 07 jari 366      */
2 26 Feb 07 jari 367     public void onClosed() {
2 26 Feb 07 jari 368     }
2 26 Feb 07 jari 369     
2 26 Feb 07 jari 370     /** Invoked by the framework when data is changed,
2 26 Feb 07 jari 371      * if this viewer is selected.
2 26 Feb 07 jari 372      * @see IData
2 26 Feb 07 jari 373      */
2 26 Feb 07 jari 374     public void onDataChanged(IData data) {
2 26 Feb 07 jari 375     }
2 26 Feb 07 jari 376     
2 26 Feb 07 jari 377     /** Invoked by the framework when this viewer was deselected.
2 26 Feb 07 jari 378      */
2 26 Feb 07 jari 379     public void onDeselected() {
2 26 Feb 07 jari 380     }
2 26 Feb 07 jari 381     
2 26 Feb 07 jari 382     /** Invoked by the framework when display menu is changed,
2 26 Feb 07 jari 383      * if this viewer is selected.
2 26 Feb 07 jari 384      * @see IDisplayMenu
2 26 Feb 07 jari 385      */
2 26 Feb 07 jari 386     public void onMenuChanged(IDisplayMenu menu) {
2 26 Feb 07 jari 387     }
2 26 Feb 07 jari 388     
2 26 Feb 07 jari 389     /** Invoked by the framework when this viewer is selected.
2 26 Feb 07 jari 390      * @param framework The IFramework implementation
2 26 Feb 07 jari 391      */
2 26 Feb 07 jari 392     public void onSelected(IFramework framework) {
2 26 Feb 07 jari 393         this.framework = framework;
2 26 Feb 07 jari 394     }
2 26 Feb 07 jari 395     
2 26 Feb 07 jari 396     /** Returns the corner component corresponding to the indicated corner,
2 26 Feb 07 jari 397      * posibly null
2 26 Feb 07 jari 398      */
2 26 Feb 07 jari 399     public JComponent getCornerComponent(int cornerIndex) {
2 26 Feb 07 jari 400         return null;
2 26 Feb 07 jari 401     }
2 26 Feb 07 jari 402     
2 26 Feb 07 jari 403     public int[][] getClusters() {
2 26 Feb 07 jari 404         return null;
2 26 Feb 07 jari 405     }
2 26 Feb 07 jari 406     
2 26 Feb 07 jari 407     public Experiment getExperiment() {
2 26 Feb 07 jari 408         return null;
2 26 Feb 07 jari 409     }
2 26 Feb 07 jari 410     
2 26 Feb 07 jari 411     /** Returns int value indicating viewer type
2 26 Feb 07 jari 412      * Cluster.GENE_CLUSTER, Cluster.EXPERIMENT_CLUSTER, or -1 for both or unspecified
2 26 Feb 07 jari 413      */
2 26 Feb 07 jari 414     public int getViewerType() {
2 26 Feb 07 jari 415         return -1;
2 26 Feb 07 jari 416     }
2 26 Feb 07 jari 417     
2 26 Feb 07 jari 418   /* (non-Javadoc)
2 26 Feb 07 jari 419    * @see org.tigr.microarray.mev.cluster.gui.IViewer#getExperimentID()
2 26 Feb 07 jari 420    */
2 26 Feb 07 jari 421   public int getExperimentID() {
2 26 Feb 07 jari 422     return this.exptID;
2 26 Feb 07 jari 423   }
2 26 Feb 07 jari 424
2 26 Feb 07 jari 425   /* (non-Javadoc)
2 26 Feb 07 jari 426    * @see org.tigr.microarray.mev.cluster.gui.IViewer#setExperimentID(int)
2 26 Feb 07 jari 427    */
2 26 Feb 07 jari 428   public void setExperimentID(int id) {
2 26 Feb 07 jari 429     this.exptID = id;
2 26 Feb 07 jari 430   }
2 26 Feb 07 jari 431     
2 26 Feb 07 jari 432 }