norsys.netica.gui
Class LinkGraphic

java.lang.Object
  |
  +--java.awt.Component
        |
        +--norsys.netica.gui.LinkGraphic
All Implemented Interfaces:
DataDisplayer, java.util.EventListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.awt.event.MouseListener, java.io.Serializable

public class LinkGraphic
extends java.awt.Component
implements DataDisplayer, java.awt.event.MouseListener

A java.awt.Component for displaying a link (arrow) between two NodePanels. By default the links are drawn in a fashion similar to that in Netica Application (TM). Using the setStroke method you have full access to the way the body of the link is drawn (color, thickness, solid/dashed, etc.). There are also methods for controlling the width and length of the arrowhead. In the following figure, there are two styles of link shown. Countless other styles and colors are possible.


Fig. 1. Two of many possible styles of LinkGraphic.

Event Handling: LinkGraphic objects will respond only to mouse press, release, and click events. To listen for these events, create a java.awt.event.MouseListener and attach it to the LinkGraphic using addMouseListener, just as you would any other java.awt.Component. Although LinkGraphic objects ignore enter, leave, and drag events, you can handle these events yourself by extending the LinkGraphic class and providing your own handler methods in the child class.

NetPanel objects will construct one LinkGraphic object for each link that exists in the Net they represent. Unlike NodePanel objects, these LinkGraphic objects do not correspond to any VisualObject display properties of links within the Netica Net. Thus, there is currently no way to save or restore link properties when Nets are saved and restored.

You may access the LinkGraphic objects owned by a NetPanel using NetPanel.getLinkGraphics, and you may conveniently attach a single MouseListener to all the NetPanel's LinkGraphic objects with a single call to NetPanel.addListenerToAllComponents.

The Netica distribution includes a sample program, /examples/NetViewer.java, that illustrates how to work with LinkGraphic objects.

Since:
3.0
Version:
5.04 - January 21, 2012
See Also:
Serialized Form

Inner classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent
 
Field Summary
static java.awt.Color defaultForegroundColor

The color of this LinkGraphic upon construction.

static int defaultLineWidth

The width of this LinkGraphic upon construction.

static java.awt.Stroke defaultStroke

The java.awt.Stroke used when initially constructing LinkGraphic objects.

static int DISPLAY_MODE_GRAYED

Used to display this LinkGraphic as "grayed" or "inactive".

static int DISPLAY_MODE_HILITED

Used to display this LinkGraphic as having been specially selected.

static int DISPLAY_MODE_NORMAL

Used to display this LinkGraphic in normal fashion.

static java.awt.Color grayedModeColor

A color to use for signaling that this LinkGraphic is in "grayed out" mode ( see setDisplayMode(DISPLAY_MODE_GRAYED)).

static java.awt.Color hilitedModeColor

A color to use for signaling that this LinkGraphic is in "hilited" mode ( see setDisplayMode(DISPLAY_MODE_HILITED)).

static double LINK_CLICK_DISTANCE_TOLERANCE

Controls the threshold used by isNear.

static int LINK_DEFAULT_ARROW_HEAD_LENGTH

Used to set the length of the triangle forming a link arrow's head.

static int LINK_DEFAULT_ARROW_HEAD_WIDTH

Used to set the width of the triangle forming a link arrow's head.

 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
LinkGraphic(java.awt.Container parentContainer, NodePanel childNodePanel, NodePanel parentNodePanel)

public constructors

 
Method Summary
 int getArrowHeadLength()

Gets the length of the arrow head.

 int getArrowHeadWidth()

Gets the width of the arrow head.

 java.awt.Point getCenterPoint()

Gets the center point of the link.

 NodePanel getChildNodePanel()

Return the NodePanel that is nearest to the arrow end of this link.

 int getDisplayMode()

Returns whether the link is grayed, normal, or hi-lited.

 java.awt.Point getEndPoint()

Gets the endpoint (arrowhead end) of the link.

 NodePanel getParentNodePanel()

Return the NodePanel that is nearest to the start end of this link.

 java.awt.Point getStartPoint()

Gets the startpoint (non-arrowhead end) of the link.

 java.awt.Stroke getStroke()

Returns the java.awt.Stroke used for drawing the line portion (body) of the link.

 boolean isNear(java.awt.Point point)

Returns true if point is within LINK_CLICK_DISTANCE_TOLERANCE pixels of the nearest point on this LinkGraphic.

 void mouseClicked(java.awt.event.MouseEvent event)

Informs all listeners of the click (press and release) event, provided this LinkGraphic is enabled and the mouse was pressed sufficiently near to the link.

 void mouseEntered(java.awt.event.MouseEvent event)

Satisfies MouseListener interface; does nothing (has empty implementation body).

 void mouseExited(java.awt.event.MouseEvent event)

Satisfies MouseListener interface; does nothing (has empty implementation body).

 void mousePressed(java.awt.event.MouseEvent event)

Informs all listeners of the press event, provided this LinkGraphic is enabled and the mouse was pressed sufficiently near to the link.

 void mouseReleased(java.awt.event.MouseEvent event)

Informs all listeners of the release event, provided this LinkGraphic is enabled and the mouse was pressed sufficiently near to the link.

 void paint(java.awt.Graphics g)

 

 void refreshDataDisplayed()

Refresh all the data in this graphical Component, so that it correctly represents the current state of the Netica object it represents.

 void setArrowHeadLength(int newLength)

Sets the length of the arrow head.

 void setArrowHeadWidth(int newWidth)

Sets the width of the arrow head.

 void setDisplayMode(int displayMode)

Sets whether the link is displayed as grayed, normal, or hi-lited.

 void setEndPoint(java.awt.Point endPoint)

Sets the endpoint (arrowhead end) of the link, using Graphics coordinates.

 void setStartPoint(java.awt.Point startPoint)

Sets the startpoint (non-arrowhead end) of the link, using Graphics coordinates.

 void setStroke(java.awt.Stroke stroke)

Sets the java.awt.Stroke used for drawing the line portion (body) of the link.

 java.lang.String toString()

Returns a compact description of the link.

 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, deliverEvent, disable, disableEvents, dispatchEvent, doLayout, enable, enable, enableEvents, enableInputMethods, firePropertyChange, getAccessibleContext, getAlignmentX, getAlignmentY, getBackground, getBounds, getBounds, getColorModel, getComponentAt, getComponentAt, getComponentOrientation, getCursor, getDropTarget, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getInputContext, getInputMethodRequests, getListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMaximumSize, getMinimumSize, getName, getParent, getPeer, getPreferredSize, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, invalidate, isDisplayable, isDoubleBuffered, isEnabled, isFocusTraversable, isLightweight, isOpaque, isShowing, isValid, isVisible, keyDown, keyUp, layout, list, list, list, list, list, locate, location, lostFocus, minimumSize, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, paramString, postEvent, preferredSize, prepareImage, prepareImage, print, printAll, processComponentEvent, processEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFont, setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, show, size, transferFocus, update, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

public static double LINK_CLICK_DISTANCE_TOLERANCE 
Controls the threshold used by isNear.


public static int LINK_DEFAULT_ARROW_HEAD_LENGTH 
Used to set the length of the triangle forming a link arrow's head. The length dimension is parallel to the arrow's direction. Experiment to taste.

public static int LINK_DEFAULT_ARROW_HEAD_WIDTH 
Used to set the width of the triangle forming a link arrow's head. The width dimension is perpendicular to the arrow's direction. Experiment to taste.

public static java.awt.Stroke defaultStroke 
The java.awt.Stroke used when initially constructing LinkGraphic objects. The default is   java.awt.BasicStroke( 1.0F ), a thin solid line one pixel in width.

public static final  int DISPLAY_MODE_GRAYED 
Used to display this LinkGraphic as "grayed" or "inactive". See setDisplayMode.

public static final  int DISPLAY_MODE_NORMAL 
Used to display this LinkGraphic in normal fashion. See setDisplayMode.

public static final  int DISPLAY_MODE_HILITED 
Used to display this LinkGraphic as having been specially selected. See setDisplayMode.

public static java.awt.Color defaultForegroundColor 
The color of this LinkGraphic upon construction.

public static int defaultLineWidth 
The width of this LinkGraphic upon construction.

public static java.awt.Color grayedModeColor 
A color to use for signaling that this LinkGraphic is in "grayed out" mode ( see setDisplayMode(DISPLAY_MODE_GRAYED)). The default is gray.

public static java.awt.Color hilitedModeColor 
A color to use for signaling that this LinkGraphic is in "hilited" mode ( see setDisplayMode(DISPLAY_MODE_HILITED)). The default is red.
Constructor Detail
public LinkGraphic (
 java.awt.Container  parentContainer
 NodePanel  childNodePanel
 NodePanel  parentNodePanel 
) throws NeticaException
public constructors
Method Detail
public int getArrowHeadLength ( )
Gets the length of the arrow head.

Version:
Versions 3.0 and later have this method.
See Also:
LINK_DEFAULT_ARROW_HEAD_LENGTH    Initial length upon construction
setArrowHeadLength    Sets it
getArrowHeadWidth    Get the width instead


public int getArrowHeadWidth ( )
Gets the width of the arrow head.

Version:
Versions 3.0 and later have this method.
See Also:
LINK_DEFAULT_ARROW_HEAD_WIDTH    Initial width upon construction
setArrowHeadWidth    Sets it
getArrowHeadLength    Get the length instead


public NodePanel getChildNodePanel ( )
Return the NodePanel that is nearest to the arrow end of this link.

Version:
Versions 3.0 and later have this method.
See Also:
getParentNodePanel    Retrieve the NodePanel at the other end


public java.awt.Point getCenterPoint ( )
Gets the center point of the link.

Version:
Versions 3.0 and later have this method.
See Also:
getStartPoint    Gets the start point
getEndPoint    Gets the end point


public int getDisplayMode ( )
Returns whether the link is grayed, normal, or hi-lited.

Returns one of DISPLAY_MODE_GRAYED, DISPLAY_MODE_NORMAL, or DISPLAY_MODE_HILITED.

Version:

Versions 3.0 and later have this method.
See Also:
setDisplayMode    Sets it.


public java.awt.Point getEndPoint ( )
Gets the endpoint (arrowhead end) of the link.

Version:
Versions 3.0 and later have this method.
See Also:
getStartPoint    Gets the start point instead
setEndPoint    Sets it


public NodePanel getParentNodePanel ( )
Return the NodePanel that is nearest to the start end of this link.

Version:
Versions 3.0 and later have this method.
See Also:
getChildNodePanel    Retrieve the NodePanel at the other end.


public java.awt.Point getStartPoint ( )
Gets the startpoint (non-arrowhead end) of the link.

Version:
Versions 3.0 and later have this method.
See Also:
getEndPoint    Gets the end point instead
getCenterPoint    Gets the center point instead
setStartPoint    Sets i.


public java.awt.Stroke getStroke ( )
Returns the java.awt.Stroke used for drawing the line portion (body) of the link.

Version:
Versions 3.0 and later have this method.
See Also:
setStroke    Sets it


public boolean isNear (
 java.awt.Point  point 
)
Returns true if point is within LINK_CLICK_DISTANCE_TOLERANCE pixels of the nearest point on this LinkGraphic.

Parameters:
java.awt.Point    point    A point to test

Version:
Versions 3.0 and later have this method.
See Also:
LINK_CLICK_DISTANCE_TOLERANCE    Controls the threshold of the distance measurement.


public void paint (
 java.awt.Graphics  g 
)
Overrides:
paint in class java.awt.Component

public void setArrowHeadLength (
 int  newLength 
)
Sets the length of the arrow head.

Parameters:
int    newLength    

Version:
Versions 3.0 and later have this method.
See Also:
LINK_DEFAULT_ARROW_HEAD_LENGTH    Initial length upon construction
getArrowHeadLength    Retrieves it
setArrowHeadWidth    Set the width instead


public void setArrowHeadWidth (
 int  newWidth 
)
Sets the width of the arrow head.

Parameters:
int    newWidth    

Version:
Versions 3.0 and later have this method.
See Also:
LINK_DEFAULT_ARROW_HEAD_WIDTH    Initial width upon construction
getArrowHeadWidth    Retrieves it
setArrowHeadLength    Set the length instead


public void setDisplayMode (
 int  displayMode 
)
Sets whether the link is displayed as grayed, normal, or hi-lited.

For normal mode, this Component's foreground Color is used.

Parameters:
int    displayMode    One of DISPLAY_MODE_GRAYED, DISPLAY_MODE_NORMAL, or DISPLAY_MODE_HILITED.

Version:

Versions 3.0 and later have this method.
See Also:
getDisplayMode    Retrieves it.


public void setEndPoint (
 java.awt.Point  endPoint 
)
Sets the endpoint (arrowhead end) of the link, using Graphics coordinates.

Parameters:
java.awt.Point    endPoint    The arrowhead (Node child) end of the link

Version:
Versions 3.0 and later have this method.
See Also:
setStartPoint    Sets the start point instead
getEndPoint    Retrieves it


public void setStartPoint (
 java.awt.Point  startPoint 
)
Sets the startpoint (non-arrowhead end) of the link, using Graphics coordinates.

Parameters:
java.awt.Point    startPoint    The start (Node parent) end of the link

Version:
Versions 3.0 and later have this method.
See Also:
setEndPoint    Sets the end point instead
getStartPoint    Retrieves it


public void setStroke (
 java.awt.Stroke  stroke 
)
Sets the java.awt.Stroke used for drawing the line portion (body) of the link.

Parameters:
Stroke    stroke    The new stroke to use

Version:
Versions 3.0 and later have this method.
See Also:
getStroke    Retrieves it


public String toString ( )
Returns a compact description of the link.

For instance for a link between the Smoking (parent) to the Bronchitis (child) node, it might be:

  LinkGraphic: [parent=Smoking at (544,83), child=Bronchitis at (602,128)]

Version:

Versions 3.0 and later have this method.
Overrides:
toString in class java.awt.Component

public void refreshDataDisplayed ( ) throws NeticaException
Description copied from interface: DataDisplayer
Refresh all the data in this graphical Component, so that it correctly represents the current state of the Netica object it represents.

If this is a Container object, then it should arrange to invoke the refreshDataDisplayed method of all the DataDisplayer objects it contains.

Version:

Versions 3.0 and later have this method.
Specified by:
refreshDataDisplayed in interface DataDisplayer

public void mouseClicked (
 java.awt.event.MouseEvent  event 
)
Informs all listeners of the click (press and release) event, provided this LinkGraphic is enabled and the mouse was pressed sufficiently near to the link.

This link is enabled iff java.awt.Component.isEnabled() returns true.

The mouse is sufficiently near iff isNear returns true.

Parameters:
MouseEvent    event    The mouseClicked event.

Version:

Versions 3.0 and later have this method.
See Also:
LINK_CLICK_DISTANCE_TOLERANCE    controls proximity sensitivity
mousePressed    receives mousePressed events instead
mouseClicked    receives mouseClicked events instead

Specified by:
mouseClicked in interface java.awt.event.MouseListener

public void mouseEntered (
 java.awt.event.MouseEvent  event 
)
Satisfies MouseListener interface; does nothing (has empty implementation body).
Specified by:
mouseEntered in interface java.awt.event.MouseListener

public void mouseExited (
 java.awt.event.MouseEvent  event 
)
Satisfies MouseListener interface; does nothing (has empty implementation body).
Specified by:
mouseExited in interface java.awt.event.MouseListener

public void mousePressed (
 java.awt.event.MouseEvent  event 
)
Informs all listeners of the press event, provided this LinkGraphic is enabled and the mouse was pressed sufficiently near to the link.

This link is enabled iff java.awt.Component.isEnabled() returns true.

The mouse is sufficiently near iff isNear returns true.

Parameters:
MouseEvent    event    The mousePressed event.

Version:

Versions 3.0 and later have this method.
See Also:
LINK_CLICK_DISTANCE_TOLERANCE    controls proximity sensitivity
mouseReleased    receives mouseReleased events instead
mouseClicked    receives mouseClicked events instead

Specified by:
mousePressed in interface java.awt.event.MouseListener

public void mouseReleased (
 java.awt.event.MouseEvent  event 
)
Informs all listeners of the release event, provided this LinkGraphic is enabled and the mouse was pressed sufficiently near to the link.

This link is enabled iff java.awt.Component.isEnabled() returns true.

The mouse is sufficiently near iff isNear returns true.

Parameters:
MouseEvent    event    The mouseReleased event.

Version:

Versions 3.0 and later have this method.
See Also:
LINK_CLICK_DISTANCE_TOLERANCE    controls proximity sensitivity
mousePressed    receives mousePressed events instead
mouseClicked    receives mouseClicked events instead

Specified by:
mouseReleased in interface java.awt.event.MouseListener