weka.gui.graphvisualizer
Class GraphVisualizer

java.lang.Object
  extended byjava.awt.Component
      extended byjava.awt.Container
          extended byjavax.swing.JComponent
              extended byjavax.swing.JPanel
                  extended byweka.gui.graphvisualizer.GraphVisualizer
All Implemented Interfaces:
javax.accessibility.Accessible, GraphConstants, java.awt.image.ImageObserver, LayoutCompleteEventListener, java.awt.MenuContainer, java.io.Serializable

public class GraphVisualizer
extends javax.swing.JPanel
implements GraphConstants, LayoutCompleteEventListener

This class displays the graph we want to visualize. It should be sufficient to use only this class in weka.gui.graphvisulizer package to visualize a graph. The description of a graph should be provided as a string argument using readBIF or readDOT method in either XMLBIF03 or DOT format. Alternatively, an InputStream in XMLBIF03 can also be provided to another variation of readBIF. It would be necessary in case input is in DOT format to call the layoutGraph() method to display the graph correctly after the call to readDOT. It is also necessary to do so if readBIF is called and the graph description doesn't have x y positions for nodes.

The graph's data is held in two FastVectors, nodes are stored as objects of GraphNode class and edges as objects of GraphEdge class.

The graph is displayed by positioning and drawing each node according to its x y position and then drawing all the edges coming out of it give by its edges[][] array, the arrow heads are ofcourse marked in the opposite(ie original direction) or both directions if the edge is reversed or is in both directions. The graph is centered if it is smaller than it's display area. The edges are drawn from the bottom of the current node to the top of the node given by edges[][] array in GraphNode class, to avoid edges crossing over other nodes. This might need to be changed if another layout engine is added or the current Hierarchical engine is updated to avoid such crossings over nodes.

Version:
1.0 - 24 Apr 2003 - Initial version (Ashraf M. Kibriya)
Author:
Ashraf M. Kibriya (amk14@cs.waikato.ac.nz)
See Also:
Serialized Form

Nested Class Summary
private  class GraphVisualizer.GraphPanel
          The panel which contains the actual graph.
private  class GraphVisualizer.GraphVisualizerMouseListener
          Listener class for processing mouseClicked
private  class GraphVisualizer.GraphVisualizerMouseMotionListener
          private class for handling mouseMoved events to highlight nodes if the the mouse is moved on one
private  class GraphVisualizer.GraphVisualizerTableModel
          Table Model for the Table that shows the probability distribution for a node
 
Nested classes inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
Nested classes inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
private  java.awt.FontMetrics fm
           
protected  java.lang.String graphID
          String containing graph's name
private  java.lang.String ICONPATH
          path for icons
private  javax.swing.JButton jBtLayout
          Button for laying out the graph again, necessary after changing node's size or some other property of the layout engine
private  javax.swing.JTextField jTfNodeHeight
          TextField for nodes height
private  javax.swing.JTextField jTfNodeWidth
          TextField for node's width
protected  FastVector m_edges
          Vector containing edges
protected  GraphVisualizer.GraphPanel m_gp
          Panel actually displaying the graph
protected  javax.swing.JButton m_jBtSave
          Save button to save the current graph in DOT or XMLBIF format.
(package private)  javax.swing.JScrollPane m_js
          this contains the m_gp GraphPanel
protected  LayoutEngine m_le
          The current LayoutEngine
protected  FastVector m_nodes
          Vector containing nodes
private  int maxStringWidth
          used for setting appropriate node size
private  int nodeHeight
           
private  int nodeWidth
           
private  int paddedNodeWidth
           
private  double scale
           
private  int[] zoomPercents
          used when using zoomIn and zoomOut buttons
 
Fields inherited from class javax.swing.JPanel
 
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.Container
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface weka.gui.graphvisualizer.GraphConstants
DIRECTED, DOUBLE, NORMAL, PLURAL_DUMMY, REVERSED, SINGULAR_DUMMY
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
GraphVisualizer()
          Constructor
Sets up the gui and initializes all the other previously uninitialized variables.
 
Method Summary
 void layoutCompleted(LayoutCompleteEvent le)
          This method is an implementation for LayoutCompleteEventListener class.
 void layoutGraph()
          This method lays out the graph by calling the LayoutEngine's layoutGraph() method.
static void main(java.lang.String[] args)
          Main method to load a text file with the description of a graph from the command line
 void readBIF(java.io.InputStream instream)
          BIF reader
Reads a graph description in XMLBIF03 from an InputStrem
 void readBIF(java.lang.String instring)
          BIF reader
Reads a graph description in XMLBIF03 from a string
 void readDOT(java.io.Reader input)
          Dot reader
Reads a graph description in DOT format from a string
protected  void setAppropriateNodeSize()
          This method sets the node size that is appropriate considering the maximum label size that is present.
protected  void setAppropriateSize()
          Sets the preferred size for m_gp GraphPanel to the minimum size that is neccessary to display the graph.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getGraphics, getHeight, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isPreferredSizeSet, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFont, setForeground, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, 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, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMouseWheelListeners, getName, getParent, getPeer, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, 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, processMouseEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, 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, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

m_nodes

protected FastVector m_nodes
Vector containing nodes


m_edges

protected FastVector m_edges
Vector containing edges


m_le

protected LayoutEngine m_le
The current LayoutEngine


m_gp

protected GraphVisualizer.GraphPanel m_gp
Panel actually displaying the graph


graphID

protected java.lang.String graphID
String containing graph's name


m_jBtSave

protected javax.swing.JButton m_jBtSave
Save button to save the current graph in DOT or XMLBIF format. The graph should be layed out again to get the original form if reloaded from command line, as the formats do not allow saving specific information for a properly layed out graph.


ICONPATH

private final java.lang.String ICONPATH
path for icons

See Also:
Constant Field Values

fm

private java.awt.FontMetrics fm

scale

private double scale

nodeHeight

private int nodeHeight

nodeWidth

private int nodeWidth

paddedNodeWidth

private int paddedNodeWidth

jTfNodeWidth

private final javax.swing.JTextField jTfNodeWidth
TextField for node's width


jTfNodeHeight

private final javax.swing.JTextField jTfNodeHeight
TextField for nodes height


jBtLayout

private final javax.swing.JButton jBtLayout
Button for laying out the graph again, necessary after changing node's size or some other property of the layout engine


maxStringWidth

private int maxStringWidth
used for setting appropriate node size


zoomPercents

private int[] zoomPercents
used when using zoomIn and zoomOut buttons


m_js

javax.swing.JScrollPane m_js
this contains the m_gp GraphPanel

Constructor Detail

GraphVisualizer

public GraphVisualizer()
Constructor
Sets up the gui and initializes all the other previously uninitialized variables.

Method Detail

setAppropriateNodeSize

protected void setAppropriateNodeSize()
This method sets the node size that is appropriate considering the maximum label size that is present. It is used internally when custom node size checkbox is unchecked.


setAppropriateSize

protected void setAppropriateSize()
Sets the preferred size for m_gp GraphPanel to the minimum size that is neccessary to display the graph.


layoutCompleted

public void layoutCompleted(LayoutCompleteEvent le)
This method is an implementation for LayoutCompleteEventListener class. It sets the size appropriate for m_gp GraphPanel and and revalidates it's container JScrollPane once a LayoutCompleteEvent is received from the LayoutEngine.

Specified by:
layoutCompleted in interface LayoutCompleteEventListener

layoutGraph

public void layoutGraph()
This method lays out the graph by calling the LayoutEngine's layoutGraph() method. This method should be called to display the graph nicely, unless the input XMLBIF03 already contains some layout information (ie the x,y positions of nodes.


readBIF

public void readBIF(java.lang.String instring)
             throws BIFFormatException
BIF reader
Reads a graph description in XMLBIF03 from a string

Throws:
BIFFormatException

readBIF

public void readBIF(java.io.InputStream instream)
             throws BIFFormatException
BIF reader
Reads a graph description in XMLBIF03 from an InputStrem

Throws:
BIFFormatException

readDOT

public void readDOT(java.io.Reader input)
Dot reader
Reads a graph description in DOT format from a string


main

public static void main(java.lang.String[] args)
Main method to load a text file with the description of a graph from the command line