com.approximatrix.charting.swing
Class ExtendedChartPanel

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by com.approximatrix.charting.swing.ExtendedChartPanel
All Implemented Interfaces:
Chart, java.awt.event.MouseListener, java.awt.event.MouseMotionListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.awt.print.Printable, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible

public class ExtendedChartPanel
extends javax.swing.JPanel
implements Chart, java.awt.event.MouseMotionListener, java.awt.event.MouseListener, java.awt.print.Printable

This Panel provides the possibility to include a Chart into a Swing Application. I choose not to make every Chart extend JComponent because of the overhead this would have meant. Instead, this class is an adaptor. It implements the Chart interface and contains a DefaultChart instance to which all Chart calls are promoted.

Author:
mueller, armstrong
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
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
private  int autoscale_button
          Mouse button for restoring autoscale
private  ExtendedChart chart
          The chart instance to which all method calls are promoted.
private  java.awt.Rectangle currentRect
          The selection rectangle for processing purposes
private  java.awt.Rectangle grRect
          The selection rectangle for actual drawing purposes
static int NO_SUCH_PAGE
          Constant stating page does not exist for printing
static int PAGE_EXISTS
          Constant stating page exists for printing
private  int zoom_button
          Mouse button used for zooming
private  boolean zoom_enabled
          Boolean allowing/disallowing zoom
 
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 java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
private ExtendedChartPanel()
          Creates new ChartPanel
  ExtendedChartPanel(ChartDataModel model, java.lang.String title)
          Creates a new ChartPanel with the given model and title string.
  ExtendedChartPanel(ChartDataModel model, java.lang.String title, int coord)
          Creates a new ChartPanel with the given model and title string and a coordinate system.
 
Method Summary
 void addChartRenderer(AbstractChartRenderer renderer, int z)
          Adds a ChartRenderer with a specific z-coordinate.
 void enableZoom(boolean value)
          Allows mouse selection for zooming
 java.awt.Rectangle getBounds()
          Returns the Bounds for the ChartPanel.
 ChartDataModel getChartDataModel()
          Returns the ChartDataModel.
 java.util.Map getChartRenderer()
          Returns the Map of all ChartRenderers.
 AbstractChartRenderer getChartRenderer(int z)
          Returns the ChartRenderer with a specific z-coordinate.
 CoordSystem getCoordSystem()
          Returns the coordinate system.
 Legend getLegend()
          Returns this chart's legend.
 java.awt.Dimension getPreferredSize()
          Computes the preferred size of the ChartPanel.
 Title getTitle()
          Returns the title for this chart.
private  void initComponents()
          This method is write-protected by the IDE but isn't used at all.
 boolean isEnableZoom()
          Returns whether or not dynamic zoom is enabled
 void mouseClicked(java.awt.event.MouseEvent e)
          Registers a clicked event, and, if zoom is enabled, will return the graph to autoscaling if the button causing the event is equivalent to autoscale_button.
 void mouseDragged(java.awt.event.MouseEvent e)
          Registers a mouse dragged event and updates the size of the selection rectangle being drawn on the panel if appropriate.
 void mouseEntered(java.awt.event.MouseEvent e)
          Registers a mouse entered event (unused - for interface compatibility only)
 void mouseExited(java.awt.event.MouseEvent e)
          Registers a mouse exited event (unused - for interface compatibility only)
 void mouseMoved(java.awt.event.MouseEvent e)
          Registers a mouse moved event (unused - for interface compatibility only)
 void mousePressed(java.awt.event.MouseEvent e)
          Registers the first press of a mouse button for selection purposes
 void mouseReleased(java.awt.event.MouseEvent e)
          Registers the release of the mouse button and disables selection mode
 void paint(java.awt.Graphics graphics)
          Paints the ChartPanel.
 void paintComponent(java.awt.Graphics g)
          Calls the JPanel's paintComponent(g) method only
 void performAutoScale()
          Performs an autoscale, but does not perform any disabling of zooming of the plot panel.
 int print(java.awt.Graphics g, java.awt.print.PageFormat pf, int page)
          Implements the Printable print interface.
 void render(java.awt.Graphics2D g)
          Does the layout of the title, legend and coordinate system and calls the render method of all those including the ChartRenderers.
 void setAutoscaleMouseButton(int button)
          Sets the mouse button used to register a return to autoscaling by clicking.
 void setBounds(java.awt.Rectangle r)
          Sets the Bounds for this Chart.
 void setChartDataModel(ChartDataModel model)
          Stores the ChartDataModel for this Chart.
 void setChartRenderer(java.util.Map renderer)
          Sets the Map with all ChartRenderers.
 void setCoordSystem(CoordSystem c)
          Sets the coordinate system for this chart, which can be null if the ChartRenderer doesn't need a coordinate system, e.g.
 void setLegend(Legend l)
          Sets the legend for this chart.
 void setTitle(Title t)
          Sets the title for this chart.
 void setZoomMouseButton(int button)
          Sets the mouse button used fo dynamic scaling.
private  void updateSize(java.awt.event.MouseEvent e)
          Updates the zoom rectangles to draw based on a passed-in MouseEvent.
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, 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, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintImmediately, paintImmediately, 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
 
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, 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, 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

PAGE_EXISTS

public static final int PAGE_EXISTS
Constant stating page exists for printing

See Also:
Constant Field Values

NO_SUCH_PAGE

public static final int NO_SUCH_PAGE
Constant stating page does not exist for printing

See Also:
Constant Field Values

zoom_enabled

private boolean zoom_enabled
Boolean allowing/disallowing zoom


zoom_button

private int zoom_button
Mouse button used for zooming


autoscale_button

private int autoscale_button
Mouse button for restoring autoscale


currentRect

private java.awt.Rectangle currentRect
The selection rectangle for processing purposes


grRect

private java.awt.Rectangle grRect
The selection rectangle for actual drawing purposes


chart

private ExtendedChart chart
The chart instance to which all method calls are promoted.

Constructor Detail

ExtendedChartPanel

private ExtendedChartPanel()
Creates new ChartPanel


ExtendedChartPanel

public ExtendedChartPanel(ChartDataModel model,
                          java.lang.String title)
Creates a new ChartPanel with the given model and title string.

Parameters:
model - the ChartDataModel
title - the title String

ExtendedChartPanel

public ExtendedChartPanel(ChartDataModel model,
                          java.lang.String title,
                          int coord)
Creates a new ChartPanel with the given model and title string and a coordinate system.

Parameters:
model - the ChartDataModel
title - the title String
coord - the id of the coordinate system configuration
Method Detail

initComponents

private void initComponents()
This method is write-protected by the IDE but isn't used at all.


addChartRenderer

public void addChartRenderer(AbstractChartRenderer renderer,
                             int z)
Adds a ChartRenderer with a specific z-coordinate.

Specified by:
addChartRenderer in interface Chart
Parameters:
renderer - the ChartRenderer
z - its z-coordinate.

getBounds

public java.awt.Rectangle getBounds()
Returns the Bounds for the ChartPanel.

Specified by:
getBounds in interface Chart
Overrides:
getBounds in class java.awt.Component
Returns:
the bounds

getChartDataModel

public ChartDataModel getChartDataModel()
Returns the ChartDataModel.

Specified by:
getChartDataModel in interface Chart
Returns:
the ChartDataModel

getChartRenderer

public java.util.Map getChartRenderer()
Returns the Map of all ChartRenderers.

Specified by:
getChartRenderer in interface Chart
Returns:
the Map of Renderers.

getChartRenderer

public AbstractChartRenderer getChartRenderer(int z)
Returns the ChartRenderer with a specific z-coordinate.

Specified by:
getChartRenderer in interface Chart
Parameters:
z - the z-coordinate of the desired ChartRenderer.
Returns:
the ChartRenderer or null if none has been found.

getCoordSystem

public CoordSystem getCoordSystem()
Returns the coordinate system.

Specified by:
getCoordSystem in interface Chart
Returns:
the Coordinate System for the Chart. Could be null.

getLegend

public Legend getLegend()
Returns this chart's legend.

Specified by:
getLegend in interface Chart
Returns:
the Legend for this Chart. Could be null.

getTitle

public Title getTitle()
Returns the title for this chart.

Specified by:
getTitle in interface Chart
Returns:
this Chart's Title. Could be null.

setBounds

public void setBounds(java.awt.Rectangle r)
Sets the Bounds for this Chart.

Specified by:
setBounds in interface Chart
Overrides:
setBounds in class java.awt.Component
Parameters:
r - the Rectangle object defining the bounds

setChartDataModel

public void setChartDataModel(ChartDataModel model)
Stores the ChartDataModel for this Chart.

Specified by:
setChartDataModel in interface Chart
Parameters:
model - the ChartDataModel

setChartRenderer

public void setChartRenderer(java.util.Map renderer)
Sets the Map with all ChartRenderers. The keys have to be the z-coordinates of the ChartRenderers.

Specified by:
setChartRenderer in interface Chart
Parameters:
renderer - The Map of ChartRenderers.

setCoordSystem

public void setCoordSystem(CoordSystem c)
Sets the coordinate system for this chart, which can be null if the ChartRenderer doesn't need a coordinate system, e.g. if it's a PieChart.

Specified by:
setCoordSystem in interface Chart
Parameters:
c - The Coordinate System for the Chart.

setLegend

public void setLegend(Legend l)
Sets the legend for this chart.

Specified by:
setLegend in interface Chart
Parameters:
l - The Legend this Chart contains.

setTitle

public void setTitle(Title t)
Sets the title for this chart.

Specified by:
setTitle in interface Chart
Parameters:
t - This Chart's Title.

getPreferredSize

public java.awt.Dimension getPreferredSize()
Computes the preferred size of the ChartPanel.

Overrides:
getPreferredSize in class javax.swing.JComponent
Returns:
new java.awt.Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE)

paint

public void paint(java.awt.Graphics graphics)
Paints the ChartPanel. Calls chart.render((Graphics2D)graphics)

Overrides:
paint in class javax.swing.JComponent
Parameters:
graphics - the Graphics2D object to paint in

render

public void render(java.awt.Graphics2D g)
Does the layout of the title, legend and coordinate system and calls the render method of all those including the ChartRenderers.

Specified by:
render in interface Chart
Parameters:
g - the Graphics2D object to paint in. Just calls paint(Graphics).

paintComponent

public void paintComponent(java.awt.Graphics g)
Calls the JPanel's paintComponent(g) method only

Overrides:
paintComponent in class javax.swing.JComponent

mouseDragged

public void mouseDragged(java.awt.event.MouseEvent e)
Registers a mouse dragged event and updates the size of the selection rectangle being drawn on the panel if appropriate.

Specified by:
mouseDragged in interface java.awt.event.MouseMotionListener

mousePressed

public void mousePressed(java.awt.event.MouseEvent e)
Registers the first press of a mouse button for selection purposes

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

mouseReleased

public void mouseReleased(java.awt.event.MouseEvent e)
Registers the release of the mouse button and disables selection mode

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

mouseEntered

public void mouseEntered(java.awt.event.MouseEvent e)
Registers a mouse entered event (unused - for interface compatibility only)

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

mouseExited

public void mouseExited(java.awt.event.MouseEvent e)
Registers a mouse exited event (unused - for interface compatibility only)

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

mouseMoved

public void mouseMoved(java.awt.event.MouseEvent e)
Registers a mouse moved event (unused - for interface compatibility only)

Specified by:
mouseMoved in interface java.awt.event.MouseMotionListener

mouseClicked

public void mouseClicked(java.awt.event.MouseEvent e)
Registers a clicked event, and, if zoom is enabled, will return the graph to autoscaling if the button causing the event is equivalent to autoscale_button.

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

performAutoScale

public void performAutoScale()
Performs an autoscale, but does not perform any disabling of zooming of the plot panel.


enableZoom

public void enableZoom(boolean value)
Allows mouse selection for zooming

Parameters:
value - true to allow dynamic zoom, false otherwise

isEnableZoom

public boolean isEnableZoom()
Returns whether or not dynamic zoom is enabled

Returns:
true if zoom is enabled, false otherwise

setAutoscaleMouseButton

public void setAutoscaleMouseButton(int button)
Sets the mouse button used to register a return to autoscaling by clicking. Use NaN to disable this feature.

Parameters:
button - the button to use, usually taken from MouseEvent.{BUTTON1, BUTTON2, BUTTON3}

setZoomMouseButton

public void setZoomMouseButton(int button)
Sets the mouse button used fo dynamic scaling. Use NaN to disable this feature.

Parameters:
button - the button to use, usually taken from MouseEvent.{BUTTON1, BUTTON2, BUTTON3}

updateSize

private void updateSize(java.awt.event.MouseEvent e)
Updates the zoom rectangles to draw based on a passed-in MouseEvent. This routine exit immediately if there is currently no rectangle to zoom with or zooming is not enabled.

Parameters:
e - a MouseEvent from which to extract data

print

public int print(java.awt.Graphics g,
                 java.awt.print.PageFormat pf,
                 int page)
          throws java.awt.print.PrinterException
Implements the Printable print interface. Causes the panel's chart to be printed at screen size based on the automatically passed print arguments.

Specified by:
print in interface java.awt.print.Printable
Throws:
java.awt.print.PrinterException