BioJava:CookBook:Interfaces:Features
How do I display Features?
Features are displayed by implementations of the FeatureRenderer interface. FeatureRenderers work in much the same way as SequenceRenderers and handle the drawing of the Features from a Sequence that is held in a SequenceRenderContext.
A SequenceRenderContext has no way of interacting directly with a FeatureRenderer so a FeatureBlockSequenceRenderer is used to wrap up the FeatureRenderer and act as a proxy.
The use of a FeatureBlockSequenceRenderer and a FeatureRenderer is demonstrated in the program below. A screen shot follows the program.
[frame | center | Features in a GUI](image:Featview.jpg “wikilink”) |
```java import java.awt.*; import java.awt.event.*;
import javax.swing.*;
import org.biojava.bio.*; import org.biojava.bio.gui.sequence.*; import org.biojava.bio.seq.*; import org.biojava.bio.symbol.*;
public class FeatureView extends JFrame {
private Sequence seq;
private JPanel jPanel1 = new JPanel();
private MultiLineRenderer mlr = new MultiLineRenderer();
private FeatureRenderer featr = new BasicFeatureRenderer();
private SequenceRenderer seqR = new SymbolSequenceRenderer();
private SequencePanel seqPanel = new SequencePanel();
//the proxy between featr and seqPanel
private FeatureBlockSequenceRenderer fbr = new FeatureBlockSequenceRenderer();
public FeatureView() {
try {
seq = DNATools.createDNASequence(
"atcgcgcatgcgcgcgcgcgcgcgctttatagcgatagagatata",
"dna 1");
//create feature from 10 to 25
StrandedFeature.Template temp = new StrandedFeature.Template();
temp.annotation = Annotation.EMPTY_ANNOTATION;
temp.location = new RangeLocation(10,25);
temp.source = "";
temp.strand = StrandedFeature.POSITIVE;
temp.type = "";
//create another from 30 to 35
Feature f = seq.createFeature(temp);
temp = (StrandedFeature.Template)f.makeTemplate();
temp.location = new RangeLocation(30,35);
temp.strand = StrandedFeature.NEGATIVE;
seq.createFeature(temp);
//setup GUI
init();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
FeatureView featureView = new FeatureView();
featureView.pack();
featureView.show();
}
/**
* initialize GUI components
*/
private void init() throws Exception {
this.setTitle("FeatureView");
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
jPanel1.add(seqPanel, null);
//Register the FeatureRenderer with the FeatureBlockSequenceRenderer
fbr.setFeatureRenderer(featr);
//add Renderers to the MultiLineRenderer
mlr.addRenderer(fbr);
mlr.addRenderer(seqR);
//set the MultiLineRenderer as the SequencePanels renderer
seqPanel.setRenderer(mlr);
//set the Sequence to Render
seqPanel.setSequence(seq);
//display the whole Sequence
seqPanel.setRange(new RangeLocation(1,seq.length()));
}
/**
* Overridden so program terminates when window closes
*/
protected void processWindowEvent(WindowEvent we){
if (we.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
else {
super.processWindowEvent(we);
}
}
} ```