com.devenezia
Class YingYang

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by com.devenezia.YingYang
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable

public class YingYang
extends javax.swing.JComponent

Render a YingYang symbol

The symbol can be animated to rotate

Psychology of perception grants 'headedness' to the largest part of a contiguous region. The tail of a contiguous region is the smallest part.

There are four combinations of two binary aspects that convey the idea of motion to the observer.

  1. 1. Head direction - Direction of the black head. Clockwise or Counterclockwise.
  2. 2. Hand direction - Handedness: When black head is at 12 oclock, which direction flows to tail? Clockwise or Counterclockwise.
HeadHandPerceived visual effect
CW CW black push-CW white pull-CW
CW CCWblack pull-CW white push-CW
CCWCW black pull-CCWwhite push-CCW
CCWCCWblack push-CCWwhite pull-CCW

See Also:
Serialized Form

Nested Class Summary
static class YingYang.RotationDirection
          Clockwise or Counterclockwise
 
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
 
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
YingYang()
          Creates a new instance of Rotationalndicator
 
Method Summary
protected  void animPause()
          Called from setAnimate(false)
protected  void animPlay()
          Called from setAnimate(true)
 boolean getAnimate()
          Is the component animate?
 boolean getAutosize()
          Will the visualization use all available space?
 int getBigDiameter()
          Diameter of the circle C, on which the orbit circles are drawn
 boolean getCentered()
          true if the symbol is centered
 boolean getDrawLittle()
          true if little circles are drawn
 boolean getDrawOutline()
          true if symbol is outlined
 YingYang.RotationDirection getHandDirection()
          Direction of black to white gradient
 YingYang.RotationDirection getHeadDirection()
          Direction of color cycling, apparent direction of black circle
 double getLittleDiameter()
          Diameter of the little circles
 double getLittleDiameterOffset()
          Center of little circles, offset from center
 int getOutlineThickness()
          Thickness of outline circle
 int getPaintInterval()
          How often does the component redraw itself when animate
 java.awt.Dimension getPreferredSize()
          300 x 300
 double getSweepTime()
          Time to complete one revolution
 double getTheta()
          Symbol rotation in radians
protected  void paintComponent(java.awt.Graphics graphics)
          Draw the symbol
 void setAnimate(boolean on)
          Turn animation on or off
 void setAutosize(boolean on)
          Cause the component to use all available space
 void setBigDiameter(int n)
          Diameter of the circle on which the circles are drawn
 void setCentered(boolean on)
          Center the symbol
 void setDrawLittle(boolean on)
          Draw the little circles
 void setDrawOutline(boolean on)
          Outline the symbol
 void setHandDirection(YingYang.RotationDirection dir)
          Direction of black to white gradient
 void setHeadDirection(YingYang.RotationDirection dir)
          Direction of color cycling, apparent direction of black circle
 void setLittleDiameter(double x)
          Diameter of the little circles
 void setLittleDiameterOffset(double x)
          Center of little circles, offset from center
 void setOutlineThickness(int thickness)
          Annulus of an outline circle
 void setPaintInterval(int n)
          How often should the component redraw itself when animate (ms)
 void setSweepTime(double t)
          Time (s) to complete one revolution
 void setTheta(double theta)
          Symbol rotation in radians
 
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, 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, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

YingYang

public YingYang()
Creates a new instance of Rotationalndicator

Method Detail

setAnimate

public void setAnimate(boolean on)
Turn animation on or off


getAnimate

public boolean getAnimate()
Is the component animate?

Returns:
true if animation is occurring

animPlay

protected void animPlay()
Called from setAnimate(true)


animPause

protected void animPause()
Called from setAnimate(false)


setPaintInterval

public void setPaintInterval(int n)
How often should the component redraw itself when animate (ms)

When sweepTime is small paintInterval might need to be reduced in order to ensure a smooth animation.

When bigDiameter is large paintInterval might need to be reduced in order to ensure a smooth animation.

default: 50 ms


getPaintInterval

public int getPaintInterval()
How often does the component redraw itself when animate

Returns:
milliseconds

setSweepTime

public void setSweepTime(double t)
Time (s) to complete one revolution


getSweepTime

public double getSweepTime()
Time to complete one revolution

Returns:
seconds

setBigDiameter

public void setBigDiameter(int n)
Diameter of the circle on which the circles are drawn

Ignored if autoSize is on


getBigDiameter

public int getBigDiameter()
Diameter of the circle C, on which the orbit circles are drawn

Returns:
Diameter of circle on which other circles are drawn

setLittleDiameter

public void setLittleDiameter(double x)
Diameter of the little circles


getLittleDiameter

public double getLittleDiameter()
Diameter of the little circles

Returns:
Diameter of the inner circles (% of big)

setLittleDiameterOffset

public void setLittleDiameterOffset(double x)
Center of little circles, offset from center


getLittleDiameterOffset

public double getLittleDiameterOffset()
Center of little circles, offset from center

Returns:
Center of inner circles (% of big), offset from center

setHeadDirection

public void setHeadDirection(YingYang.RotationDirection dir)
Direction of color cycling, apparent direction of black circle

CW (clockwise) or CCW (counterclockwise)


getHeadDirection

public YingYang.RotationDirection getHeadDirection()
Direction of color cycling, apparent direction of black circle

Returns:
CW (clockwise) or CCW (counterclockwise)

setHandDirection

public void setHandDirection(YingYang.RotationDirection dir)
Direction of black to white gradient

CW (clockwise) or CCW (counterclockwise)


getHandDirection

public YingYang.RotationDirection getHandDirection()
Direction of black to white gradient

Returns:
CW (clockwise) or CCW (counterclockwise)

setOutlineThickness

public void setOutlineThickness(int thickness)
Annulus of an outline circle


getOutlineThickness

public int getOutlineThickness()
Thickness of outline circle


setDrawOutline

public void setDrawOutline(boolean on)
Outline the symbol


getDrawOutline

public boolean getDrawOutline()
true if symbol is outlined


setDrawLittle

public void setDrawLittle(boolean on)
Draw the little circles


getDrawLittle

public boolean getDrawLittle()
true if little circles are drawn


setTheta

public void setTheta(double theta)
Symbol rotation in radians


getTheta

public double getTheta()
Symbol rotation in radians


setAutosize

public void setAutosize(boolean on)
Cause the component to use all available space


getAutosize

public boolean getAutosize()
Will the visualization use all available space?

Returns:
true if visualization uses all available space

setCentered

public void setCentered(boolean on)
Center the symbol


getCentered

public boolean getCentered()
true if the symbol is centered


paintComponent

protected void paintComponent(java.awt.Graphics graphics)
Draw the symbol

Overrides:
paintComponent in class javax.swing.JComponent

getPreferredSize

public java.awt.Dimension getPreferredSize()
300 x 300

Overrides:
getPreferredSize in class javax.swing.JComponent
Returns:
300 x 300