org.biojava.bio.gui.sequence
Class SequencePanel

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by org.biojava.bio.gui.sequence.SequencePanel
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.swing.SwingConstants, SequenceRenderContext, Changeable

public class SequencePanel
extends javax.swing.JComponent
implements javax.swing.SwingConstants, SequenceRenderContext, Changeable

A panel that displays a Sequence.

A SequencePanel can either display the sequence from left-to-right (HORIZONTAL) or from top-to-bottom (VERTICAL). It has an associated scale which is the number of pixels per symbol. It also has a lines property that controls how to wrap the sequence off one end and onto the other.

Each line in the SequencePanel is broken down into a list of strips, each rendered by an individual SequenceRenderer object. You could add a SequenceRenderer that draws on genes, another that draws repeats and another that prints out the DNA sequence. They are responsible for rendering their view of the sequence in the place that the SequencePanel positions them.

Author:
Thomas Down, Matthew Pocock, David Huen
See Also:
Serialized Form

Nested Class Summary
 class SequencePanel.Border
           
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
static ChangeType RENDERER
           
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface org.biojava.bio.gui.sequence.SequenceRenderContext
LAYOUT, REPAINT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
SequencePanel()
          Create a new SequencePanel.
 
Method Summary
protected  void _setRenderer(SequenceRenderer r)
           
 void addChangeListener(ChangeListener cl)
          Add a listener that will be informed of all changes.
 void addChangeListener(ChangeListener cl, ChangeType ct)
          Add a listener that will be informed of changes of a given type.
 void addSequenceViewerListener(SequenceViewerListener svl)
           
 void addSequenceViewerMotionListener(SequenceViewerMotionListener svml)
           
protected  int[] calcDist()
           
 boolean equals(java.lang.Object o)
           
protected  ChangeSupport getChangeSupport(ChangeType ct)
           
 int getDirection()
          Retrieve the current rendering direction.
 FeatureHolder getFeatures()
          The features to render.
 SequenceRenderContext.Border getLeadingBorder()
          Retrieve the object that encapsulates the leading border area - the space before sequence information is rendered.
 RangeLocation getRange()
          The range of the SymbolList to render.
 java.awt.RenderingHints getRenderingHints()
           
 double getScale()
          Retrieve the current scale.
 SymbolList getSequence()
           
 SymbolList getSymbols()
          Retrieve the currently rendered SymbolList
 SequenceRenderContext.Border getTrailingBorder()
          Retrieve the object that encapsulates the trailing border area - the space after sequence information is rendered.
 int graphicsToSequence(double gPos)
          Converts a graphical position into a sequence coordinate.
 int graphicsToSequence(java.awt.geom.Point2D point)
          Converts a graphical position into a sequence coordinate.
protected  boolean hasChangeListeners()
           
 int hashCode()
           
protected  boolean hasListeners()
           
protected  boolean isActive()
           
 boolean isUnchanging(ChangeType ct)
           A particular ChangeType can never be raised by this Changeable.
 void paintComponent(java.awt.Graphics g)
          Paint this component.
 void removeChangeListener(ChangeListener cl)
          Remove a listener that was interested in all types of changes.
 void removeChangeListener(ChangeListener cl, ChangeType ct)
          Remove a listener that was interested in a specific types of changes.
 void removeSequenceViewerListener(SequenceViewerListener svl)
           
 void removeSequenceViewerMotionListener(SequenceViewerMotionListener svml)
           
 void resizeAndValidate()
           
 double sequenceToGraphics(int seqPos)
          Converts a sequence index into a graphical coordinate.
 void setDirection(int dir)
          Set the direction that this SequencePanel renders in.
 void setRange(RangeLocation range)
           
 void setRenderer(SequenceRenderer r)
           
 void setRenderingHints(java.awt.RenderingHints hints)
          Use this to switch on effects like Anti-aliasing etc
 void setScale(double scale)
          Set the scale.
 void setSequence(SymbolList s)
          Set the SymboList to be rendered.
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.biojava.bio.gui.sequence.SequenceRenderContext
getFont
 

Field Detail

RENDERER

public static final ChangeType RENDERER
Constructor Detail

SequencePanel

public SequencePanel()
Create a new SequencePanel.

Method Detail

setRenderingHints

public void setRenderingHints(java.awt.RenderingHints hints)
Use this to switch on effects like Anti-aliasing etc

Parameters:
hints - the desired rendering properties

getRenderingHints

public java.awt.RenderingHints getRenderingHints()
Returns:
the current rendering properties

addSequenceViewerListener

public void addSequenceViewerListener(SequenceViewerListener svl)

removeSequenceViewerListener

public void removeSequenceViewerListener(SequenceViewerListener svl)

addSequenceViewerMotionListener

public void addSequenceViewerMotionListener(SequenceViewerMotionListener svml)

removeSequenceViewerMotionListener

public void removeSequenceViewerMotionListener(SequenceViewerMotionListener svml)

hasChangeListeners

protected boolean hasChangeListeners()

getChangeSupport

protected ChangeSupport getChangeSupport(ChangeType ct)

hasListeners

protected boolean hasListeners()

addChangeListener

public void addChangeListener(ChangeListener cl)
Description copied from interface: Changeable
Add a listener that will be informed of all changes.

Specified by:
addChangeListener in interface Changeable
Parameters:
cl - the ChangeListener to add

addChangeListener

public void addChangeListener(ChangeListener cl,
                              ChangeType ct)
Description copied from interface: Changeable
Add a listener that will be informed of changes of a given type.

Specified by:
addChangeListener in interface Changeable
Parameters:
cl - the ChangeListener
ct - the ChangeType it is to be informed of

removeChangeListener

public void removeChangeListener(ChangeListener cl)
Description copied from interface: Changeable
Remove a listener that was interested in all types of changes.

Specified by:
removeChangeListener in interface Changeable
Parameters:
cl - a ChangeListener to remove

removeChangeListener

public void removeChangeListener(ChangeListener cl,
                                 ChangeType ct)
Description copied from interface: Changeable
Remove a listener that was interested in a specific types of changes.

Specified by:
removeChangeListener in interface Changeable
Parameters:
cl - a ChangeListener to remove
ct - the ChangeType that it was interested in

isUnchanging

public boolean isUnchanging(ChangeType ct)
Description copied from interface: Changeable

A particular ChangeType can never be raised by this Changeable.

If this returns true, then it is guaranteed that change events of this type (and all child types) can never under any circumstances be fired by this Changeable instance. If it returns false, that does not mean that this type of event will or even can be raised, but that it is worth registering listeners incase.

Specified by:
isUnchanging in interface Changeable
Parameters:
ct - the ChangeType to check
Returns:
true if ChangeEvents of this type are guaranteed to never be fired

setSequence

public void setSequence(SymbolList s)
Set the SymboList to be rendered. This symbol list will be passed onto the SequenceRenderer instances registered with this SequencePanel.

Parameters:
s - the SymboList to render

getSequence

public SymbolList getSequence()

getSymbols

public SymbolList getSymbols()
Retrieve the currently rendered SymbolList

Specified by:
getSymbols in interface SequenceRenderContext
Returns:
the current SymbolList

getFeatures

public FeatureHolder getFeatures()
Description copied from interface: SequenceRenderContext
The features to render.

Specified by:
getFeatures in interface SequenceRenderContext
Returns:
a FeatureHolder with the Features to render

setRange

public void setRange(RangeLocation range)

getRange

public RangeLocation getRange()
Description copied from interface: SequenceRenderContext
The range of the SymbolList to render.

Specified by:
getRange in interface SequenceRenderContext
Returns:
the RangeLocation specifying which indices (inclusive) to render

setDirection

public void setDirection(int dir)
                  throws java.lang.IllegalArgumentException
Set the direction that this SequencePanel renders in. The direction can be one of HORIZONTAL or VERTICAL. Once the direction is set, the display will redraw. HORIZONTAL represents left-to-right rendering. VERTICAL represents AceDB-style vertical rendering.

Parameters:
dir - the new rendering direction
Throws:
java.lang.IllegalArgumentException

getDirection

public int getDirection()
Retrieve the current rendering direction.

Specified by:
getDirection in interface SequenceRenderContext
Returns:
the rendering direction (one of HORIZONTAL and VERTICAL)

setScale

public void setScale(double scale)
Set the scale.

The scale parameter is interpreted as the number of pixels per symbol. This may take on a wide range of values - for example, to render the symbols as text, you will need a scale of > 8, where as to render chromosome 1 you will want a scale < 0.00000001

Parameters:
scale - the new pixels-per-symbol ratio

getScale

public double getScale()
Retrieve the current scale.

Specified by:
getScale in interface SequenceRenderContext
Returns:
the number of pixels used to render one symbol

getLeadingBorder

public SequenceRenderContext.Border getLeadingBorder()
Retrieve the object that encapsulates the leading border area - the space before sequence information is rendered.

Specified by:
getLeadingBorder in interface SequenceRenderContext
Returns:
a SequenceRenderContext.Border instance

getTrailingBorder

public SequenceRenderContext.Border getTrailingBorder()
Retrieve the object that encapsulates the trailing border area - the space after sequence information is rendered.

Specified by:
getTrailingBorder in interface SequenceRenderContext
Returns:
a SequenceRenderContext.Border instance

paintComponent

public void paintComponent(java.awt.Graphics g)
Paint this component.

This calls the paint method of the currently registered SequenceRenderer after setting up the graphics appropriately.

Overrides:
paintComponent in class javax.swing.JComponent

setRenderer

public void setRenderer(SequenceRenderer r)
                 throws ChangeVetoException
Throws:
ChangeVetoException

_setRenderer

protected void _setRenderer(SequenceRenderer r)

sequenceToGraphics

public double sequenceToGraphics(int seqPos)
Description copied from interface: SequenceRenderContext
Converts a sequence index into a graphical coordinate. You will need to use this in conjunction with getDirection to correctly lay graphics out.

Specified by:
sequenceToGraphics in interface SequenceRenderContext
Parameters:
seqPos - Index within the sequence
Returns:
Equivalent graphical position in pixels

graphicsToSequence

public int graphicsToSequence(double gPos)
Description copied from interface: SequenceRenderContext
Converts a graphical position into a sequence coordinate. You will need to have used getDirection to decide whether to use the x or y coordinate.

Specified by:
graphicsToSequence in interface SequenceRenderContext
Parameters:
gPos - A pixel position
Returns:
The corresponding sequence index

graphicsToSequence

public int graphicsToSequence(java.awt.geom.Point2D point)
Description copied from interface: SequenceRenderContext
Converts a graphical position into a sequence coordinate. This will use getDirection to decide whether to use the x or y coordinate.

Specified by:
graphicsToSequence in interface SequenceRenderContext
Parameters:
point - a point representing the position
Returns:
the corresponding sequence index

resizeAndValidate

public void resizeAndValidate()

calcDist

protected int[] calcDist()

isActive

protected boolean isActive()

equals

public boolean equals(java.lang.Object o)
Overrides:
equals in class java.lang.Object

hashCode

public int hashCode()
Overrides:
hashCode in class java.lang.Object