mev-4.0.01/source/org/tigr/microarray/mev/cluster/gui/impl/pca/PCInfoViewer.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  * $RCSfile: PCInfoViewer.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.7 $
2 26 Feb 07 jari 8  * $Date: 2006/03/24 15:51:05 $
2 26 Feb 07 jari 9  * $Author: eleanorahowe $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.cluster.gui.impl.pca;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 import java.awt.Color;
2 26 Feb 07 jari 15 import java.awt.Dimension;
2 26 Feb 07 jari 16 import java.awt.GridBagConstraints;
2 26 Feb 07 jari 17 import java.awt.GridBagLayout;
2 26 Feb 07 jari 18 import java.awt.Insets;
2 26 Feb 07 jari 19 import java.beans.Expression;
2 26 Feb 07 jari 20 import java.text.DecimalFormat;
2 26 Feb 07 jari 21
2 26 Feb 07 jari 22 import javax.swing.JComponent;
2 26 Feb 07 jari 23 import javax.swing.JLabel;
2 26 Feb 07 jari 24 import javax.swing.JPanel;
2 26 Feb 07 jari 25 import javax.swing.JTextArea;
2 26 Feb 07 jari 26
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.cluster.gui.impl.ViewerAdapter;
2 26 Feb 07 jari 29 import org.tigr.util.FloatMatrix;
2 26 Feb 07 jari 30
2 26 Feb 07 jari 31 public class PCInfoViewer extends ViewerAdapter {
2 26 Feb 07 jari 32     
2 26 Feb 07 jari 33     private JComponent header;
2 26 Feb 07 jari 34     private JTextArea  content;
2 26 Feb 07 jari 35     
2 26 Feb 07 jari 36     private JLabel headerLabel;
2 26 Feb 07 jari 37     private FloatMatrix T;
2 26 Feb 07 jari 38     private DecimalFormat format;
2 26 Feb 07 jari 39     
2 26 Feb 07 jari 40     /**
2 26 Feb 07 jari 41      * Constructs a <code>PCInfoViewer</code> with specified T-matrix.
2 26 Feb 07 jari 42      */
2 26 Feb 07 jari 43     public PCInfoViewer(FloatMatrix T) {
2 26 Feb 07 jari 44   this.T = T;
2 26 Feb 07 jari 45   format = new DecimalFormat();
2 26 Feb 07 jari 46   format.setMaximumFractionDigits(5);
2 26 Feb 07 jari 47   format.setMinimumFractionDigits(5);
2 26 Feb 07 jari 48   format.setGroupingUsed(false);
2 26 Feb 07 jari 49   
2 26 Feb 07 jari 50   header  = createHeader(headerLabel=new JLabel("<html><body bgcolor='#FFFFFF'><font face='serif' size='5' color='#000080'><b>Eigenvector</b></font></body></html>"));
2 26 Feb 07 jari 51   content = createContent();
2 26 Feb 07 jari 52   setMaxWidth(content, header);
2 26 Feb 07 jari 53     }
2 26 Feb 07 jari 54     /**
2 26 Feb 07 jari 55      * @inheritDoc
2 26 Feb 07 jari 56      */
2 26 Feb 07 jari 57     public Expression getExpression(){
2 26 Feb 07 jari 58       return new Expression(this, this.getClass(), "new", 
2 26 Feb 07 jari 59           new Object[]{T});
2 26 Feb 07 jari 60     }
2 26 Feb 07 jari 61     
2 26 Feb 07 jari 62     /**
2 26 Feb 07 jari 63      * Updates the viewer with selected node object.
2 26 Feb 07 jari 64      */
2 26 Feb 07 jari 65     public void onSelected(IFramework framework) {
2 26 Feb 07 jari 66   Object userObject = framework.getUserObject();
2 26 Feb 07 jari 67   updateViewer(((Integer)userObject).intValue());
2 26 Feb 07 jari 68     }
2 26 Feb 07 jari 69     
2 26 Feb 07 jari 70     /**
2 26 Feb 07 jari 71      * Returns a content of the viewer.
2 26 Feb 07 jari 72      */
2 26 Feb 07 jari 73     public JComponent getContentComponent() {
2 26 Feb 07 jari 74   return content;
2 26 Feb 07 jari 75     }
2 26 Feb 07 jari 76     
2 26 Feb 07 jari 77     /**
2 26 Feb 07 jari 78      * Returns a header of the viewer.
2 26 Feb 07 jari 79      */
2 26 Feb 07 jari 80     public JComponent getHeaderComponent() {
2 26 Feb 07 jari 81   return header;
2 26 Feb 07 jari 82     }
2 26 Feb 07 jari 83     
2 26 Feb 07 jari 84     /**
2 26 Feb 07 jari 85      * Creates a header component.
2 26 Feb 07 jari 86      */
2 26 Feb 07 jari 87     private JComponent createHeader(JLabel label) {
2 26 Feb 07 jari 88   JPanel panel = new JPanel(new GridBagLayout());
2 26 Feb 07 jari 89   panel.setBackground(Color.white);
2 26 Feb 07 jari 90   GridBagConstraints gbc = new GridBagConstraints();
2 26 Feb 07 jari 91   gbc.fill = GridBagConstraints.HORIZONTAL;
2 26 Feb 07 jari 92   gbc.insets = new Insets(10, 0, 10, 0);
2 26 Feb 07 jari 93   panel.add(label, gbc);
2 26 Feb 07 jari 94   return panel;
2 26 Feb 07 jari 95     }
2 26 Feb 07 jari 96     
2 26 Feb 07 jari 97     /**
2 26 Feb 07 jari 98      * Creates a content component.
2 26 Feb 07 jari 99      */
2 26 Feb 07 jari 100     private JTextArea createContent() {
2 26 Feb 07 jari 101   JTextArea area = new JTextArea(T.getRowDimension(), 20);
2 26 Feb 07 jari 102         area.setMargin(new Insets(0, 10, 0, 0));       
2 26 Feb 07 jari 103   area.setEditable(false);
2 26 Feb 07 jari 104   return area;
2 26 Feb 07 jari 105     }
2 26 Feb 07 jari 106     
2 26 Feb 07 jari 107     /**
2 26 Feb 07 jari 108      * Updates the viewer for specified gene index.
2 26 Feb 07 jari 109      */
2 26 Feb 07 jari 110     private void updateViewer(int gen) {
2 26 Feb 07 jari 111   headerLabel.setText("<html><body bgcolor='#FFFFFF'><font face='serif' size='5' color='#000080'><b>Eigenvector "+String.valueOf(gen+1)+"</b></font></body></html>");
2 26 Feb 07 jari 112   content.setText("");
2 26 Feb 07 jari 113   final int rows = T.getRowDimension();
2 26 Feb 07 jari 114   StringBuffer sb = new StringBuffer(rows*10);
2 26 Feb 07 jari 115   float value;
2 26 Feb 07 jari 116   for (int i=0; i<rows; i++) {
2 26 Feb 07 jari 117       value = T.get(i, gen);
2 26 Feb 07 jari 118       if (Float.isNaN(value)) {
2 26 Feb 07 jari 119     sb.append(String.valueOf(Float.NaN)+"\n");
2 26 Feb 07 jari 120       } else {
2 26 Feb 07 jari 121     sb.append(format.format(value)+"\n");
2 26 Feb 07 jari 122       }
2 26 Feb 07 jari 123   }
2 26 Feb 07 jari 124   content.setText(sb.toString());
2 26 Feb 07 jari 125   content.setCaretPosition(0);
2 26 Feb 07 jari 126     }
2 26 Feb 07 jari 127     
2 26 Feb 07 jari 128     /**
2 26 Feb 07 jari 129      * Synchronization header and content sizes.
2 26 Feb 07 jari 130      */
2 26 Feb 07 jari 131     private void setMaxWidth(JComponent content, JComponent header) {
2 26 Feb 07 jari 132   int c_width = content.getPreferredSize().width;
2 26 Feb 07 jari 133   int h_width = header.getPreferredSize().width;
2 26 Feb 07 jari 134   if (c_width > h_width) {
2 26 Feb 07 jari 135       header.setPreferredSize(new Dimension(c_width, header.getPreferredSize().height));
2 26 Feb 07 jari 136   } else {
2 26 Feb 07 jari 137       content.setPreferredSize(new Dimension(h_width, content.getPreferredSize().height));
2 26 Feb 07 jari 138   }
2 26 Feb 07 jari 139     }
2 26 Feb 07 jari 140     
2 26 Feb 07 jari 141     /** Returns a component to be inserted into the scroll pane row header
2 26 Feb 07 jari 142      */
2 26 Feb 07 jari 143     public JComponent getRowHeaderComponent() {
2 26 Feb 07 jari 144         return null;
2 26 Feb 07 jari 145     }
2 26 Feb 07 jari 146     
2 26 Feb 07 jari 147 }