package seqviewer; import java.io.BufferedReader; import java.io.FileReader; import java.util.Iterator; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import org.biojava.bio.gui.sequence.*; import org.biojava.bio.seq.Sequence; import org.biojava.bio.seq.Feature; import org.biojava.bio.seq.FeatureHolder; import org.biojava.bio.seq.StrandedFeature; import org.biojava.bio.seq.FeatureFilter; import org.biojava.bio.seq.OptimizableFilter; import org.biojava.bio.seq.SequenceIterator; import org.biojava.bio.seq.io.SeqIOTools; import org.biojava.bio.symbol.RangeLocation; /** *
BeadDemo
demonstrates various some of the
* FeatureRender
s which extend
* AbstractBeadFeatureRenderer
. These render features in
* various shapes, colours and positions, but all within the same
* track of a MultiLineRenderer
. They were really
* designed to render protein domains, but may be used for any
* features. By selecting various paints
* (e.g. TexturePaint
s made from loaded images), border
* colours and shapes, a wide range of effects may be achieved.
Note that while the ZiggyFeatureRenderer
s occupy
* one track of the MultiLineRenderer
each,
* all the features below are in the same track (but
* have different Y-axis displacements). To dispay them all on the
* same line, just set the displacement to 0.
*
* @author Keith James
* @since 1.2
*/
public class BeadDemo
{
private static final int INITIAL_SCALE = 30;
private JFrame frame;
private JButton horiz;
private JButton vert;
private JLabel scaleLabel;
private JSlider scale;
private JScrollPane seqScroll;
private static SequencePanel seqPanel;
public BeadDemo()
{
initComponents();
}
private void initComponents()
{
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
Box controlBox = Box.createHorizontalBox();
horiz = new JButton("Horizontal");
vert = new JButton("Vertical");
scaleLabel = new JLabel("Scale");
scale = new JSlider(SwingConstants.HORIZONTAL, 1, 100, INITIAL_SCALE);
seqScroll = new JScrollPane(seqPanel);
controlBox.add(Box.createHorizontalGlue());
controlBox.add(horiz);
controlBox.add(Box.createHorizontalStrut(10));
controlBox.add(vert);
controlBox.add(Box.createHorizontalGlue());
controlBox.add(scaleLabel);
controlBox.add(Box.createHorizontalStrut(5));
controlBox.add(scale);
controlBox.add(Box.createHorizontalGlue());
frame.getContentPane().add(controlBox, BorderLayout.NORTH);
frame.getContentPane().add(seqScroll, BorderLayout.CENTER);
horiz.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
horizActionPerformed(ae);
}
});
vert.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
vertActionPerformed(ae);
}
});
scale.addChangeListener(new SliderListener());
frame.setSize(800, 200);
frame.setVisible(true);
}
private void vertActionPerformed(ActionEvent ae)
{
seqPanel.setDirection(SequencePanel.VERTICAL);
}
private void horizActionPerformed(ActionEvent ae)
{
seqPanel.setDirection(SequencePanel.HORIZONTAL);
}
public static void main(java.lang.String[] argv)
{
if (argv.length != 1)
{
java.lang.System.err.println("Usage: BeadDemo