import charite.christo.strap.StrapProtein; import charite.christo.strap.DrawGappedSequence; import charite.christo.strap.ResidueAnnotation; import charite.christo.protein.ShadingAA; import java.awt.Color; import java.awt.Point; import java.awt.Graphics; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; /* java DemoDrawGappedSequence The method DrawGappedSequence#paintComponent is used to draw the sequence into a JComponent. */ public class DemoDrawGappedSequence { private static StrapProtein p; public static void main(String[] argv){ /* make a protein with a gapped sequence */ p=new StrapProtein(); p.setGappedSequence("ASDFGH JKLQWERTZUIOyxcvbnmAAAAAAAACCCCCCCCCWWWWWWWWWWWWWWW"); /* Add a green selection to the protein. The selection gets a reference to the protein. */ ResidueAnnotation s=new ResidueAnnotation(p); p.addResidueSelection(s); /* The selection spans residues 3 to 5. */ /* For PDB-structures you can give selections in rasmol-syntax. */ s.setSelectedAminoacids("3-5"); s.setColor(Color.GREEN); /* Display the sequence in a JPanel */ /* It is necessary to overwrite the paintComponent method. */ final JPanel panel=new JPanel(){ final Point origin=new Point(0,0); /* Overwriting the paint-method */ public void paintComponent(Graphics g) { super.paintComponent(g);// background /* ShadingAA.CHEMICAL paints each residue depending on its chemical nature. */ /* If the secondary structure is given in the protein file (PDB-format, DSSP-format) */ /* then the amino acids can also be shaded according to secondary structure (last parameter=true). */ new DrawGappedSequence().draw(this,g,origin,p,ShadingAA.CHEMICAL,DrawGappedSequence.SHADE_SEC_STRU); } /* The JScrollPane needs to know the size of its child: */ /* The panel size depends on the font and the horizontal position (max. column) of the last residue. */ @Override public Dimension getPreferredSize() { final FontMetrics fm=getFontMetrics(getFont()); final int charA=fm.getAscent(),charD=fm.getDescent(),charW=fm.charWidth('X'),charH=charA+charD; return new Dimension(charW*(p.getMaxColumn()+1),charH); } }; panel.setBackground(Color.BLACK); /* enlarge font */ panel.setFont(new Font("Monospaced",Font.PLAIN,50)); /* display it in a JFrame */ final JFrame f=new JFrame(); f.setSize(300,100); f.getContentPane().add(new JScrollPane(panel)); f.show(); } }