org.jdesktop.swingx
Class JXTipOfTheDay

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 org.jdesktop.swingx.JXPanel
                      extended by org.jdesktop.swingx.JXTipOfTheDay
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable

public class JXTipOfTheDay
extends JXPanel

Provides the "Tip of The Day" pane and dialog.

Tips are retrieved from the TipOfTheDayModel. In the most common usage, a tip (as returned by TipOfTheDayModel.Tip.getTip()) is just a String. However, the return type of this method is actually Object. Its interpretation depends on its type:

Component
The Component is displayed in the dialog.
Icon
The Icon is wrapped in a JLabel and displayed in the dialog.
others
The object is converted to a String by calling its toString method. The result is wrapped in a JEditorPane or JTextArea and displayed.

JXTipOfTheDay finds its tips in its TipOfTheDayModel. Such model can be programmatically built using DefaultTipOfTheDayModel and DefaultTip but the TipLoader provides a convenient method to build a model and its tips from a Properties object.

Example:

Let's consider a file tips.properties with the following content:

 
 tip.1.description=This is the first time! Plain text.
 tip.2.description=<html>This is <b>another tip</b>, it uses HTML!
 tip.3.description=A third one
 
 
To load and display the tips:
 
 Properties tips = new Properties();
 tips.load(new FileInputStream("tips.properties"));
 
 TipOfTheDayModel model = TipLoader.load(tips);
 JXTipOfTheDay totd = new JXTipOfTheDay(model);
 
 totd.showDialog(someParentComponent);
 
 

Additionally, JXTipOfTheDay features an option enabling the end-user to choose to not display the "Tip Of The Day" dialog. This user choice can be stored in the user Preferences but JXTipOfTheDay also supports custom storage through the JXTipOfTheDay.ShowOnStartupChoice interface.

 
 Preferences userPreferences = Preferences.userRoot().node("myApp");
 totd.showDialog(someParentComponent, userPreferences);
 
 
In this code, the first time showDialog is called, the dialog will be made visible and the user will have the choice to not display it again in the future (usually this is controlled by a checkbox "Show tips on startup"). If the user unchecks the option, subsequent calls to showDialog will not display the dialog. As the choice is saved in the user Preferences, it will persist when the application is relaunched.

See Also:
TipLoader, TipOfTheDayModel, TipOfTheDayModel.Tip, showDialog(Component, Preferences), showDialog(Component, ShowOnStartupChoice), Serialized Form

Nested Class Summary
static interface JXTipOfTheDay.ShowOnStartupChoice
          Used in conjunction with the showDialog(Component, ShowOnStartupChoice) to save the "Show tips on startup" choice.
 
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
static String CURRENT_TIP_CHANGED_KEY
          Used when generating PropertyChangeEvents for the "currentTip" property
static String PREFERENCE_KEY
          Key used to store the status of the "Show tip on startup" checkbox"
static String uiClassID
          JXTipOfTheDay pluggable UI key swingx/TipOfTheDayUI
 
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
JXTipOfTheDay()
          Constructs a new JXTipOfTheDay with an empty TipOfTheDayModel
JXTipOfTheDay(TipOfTheDayModel model)
          Constructs a new JXTipOfTheDay showing tips from the given TipOfTheDayModel.
 
Method Summary
protected  JDialog createDialog(Component parentComponent, JXTipOfTheDay.ShowOnStartupChoice choice)
          Calls TipOfTheDayUI.createDialog(Component, JXTipOfTheDay.ShowOnStartupChoice).
static void forceShowOnStartup(Preferences showOnStartupPref)
          Removes the value set for "ShowTipOnStartup" in the given Preferences to ensure the dialog shown by a later call to showDialog(Component, Preferences) will be visible to the user.
 int getCurrentTip()
           
 TipOfTheDayModel getModel()
           
 TipOfTheDayUI getUI()
          Gets the UI object which implements the L&F for this component.
 String getUIClassID()
          Returns the name of the L&F class that renders this component.
static boolean isShowingOnStartup(Preferences showOnStartupPref)
           
 void nextTip()
          Shows the next tip in the list.
 void previousTip()
          Shows the previous tip in the list.
 void setCurrentTip(int currentTip)
          Sets the index of the tip to show
 void setModel(TipOfTheDayModel model)
           
 void setUI(TipOfTheDayUI ui)
          Sets the L&F object that renders this component.
 void showDialog(Component parentComponent)
          Pops up a "Tip of the day" dialog.
 boolean showDialog(Component parentComponent, JXTipOfTheDay.ShowOnStartupChoice choice)
          Pops up a "Tip of the day" dialog.
 boolean showDialog(Component parentComponent, JXTipOfTheDay.ShowOnStartupChoice choice, boolean force)
          Pops up a "Tip of the day" dialog.
 boolean showDialog(Component parentComponent, Preferences showOnStartupPref)
          Pops up a "Tip of the day" dialog.
 boolean showDialog(Component parentComponent, Preferences showOnStartupPref, boolean force)
          Pops up a "Tip of the day" dialog.
 void updateUI()
          Notification from the UIManager that the L&F has changed.
 
Methods inherited from class org.jdesktop.swingx.JXPanel
getAlpha, getBackgroundPainter, getEffectiveAlpha, getPreferredScrollableViewportSize, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, isInheritAlpha, isPaintBorderInsets, paint, paintComponent, setAlpha, setBackground, setBackgroundPainter, setInheritAlpha, setPaintBorderInsets, setScrollableTracksViewportHeight, setScrollableTracksViewportWidth
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, paramString, setUI
 
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, getPreferredSize, 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, 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, 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
 

Field Detail

uiClassID

public static final String uiClassID
JXTipOfTheDay pluggable UI key swingx/TipOfTheDayUI

See Also:
Constant Field Values

PREFERENCE_KEY

public static final String PREFERENCE_KEY
Key used to store the status of the "Show tip on startup" checkbox"

See Also:
Constant Field Values

CURRENT_TIP_CHANGED_KEY

public static final String CURRENT_TIP_CHANGED_KEY
Used when generating PropertyChangeEvents for the "currentTip" property

See Also:
Constant Field Values
Constructor Detail

JXTipOfTheDay

public JXTipOfTheDay()
Constructs a new JXTipOfTheDay with an empty TipOfTheDayModel


JXTipOfTheDay

public JXTipOfTheDay(TipOfTheDayModel model)
Constructs a new JXTipOfTheDay showing tips from the given TipOfTheDayModel.

Parameters:
model -
Method Detail

updateUI

public void updateUI()
Notification from the UIManager that the L&F has changed. Replaces the current UI object with the latest version from the UIManager.

Overrides:
updateUI in class JPanel
See Also:
JComponent.updateUI()

setUI

public void setUI(TipOfTheDayUI ui)
Sets the L&F object that renders this component.

Parameters:
ui - the TipOfTheDayUI L&F object
See Also:
UIDefaults.getUI(javax.swing.JComponent)
This class has associated bean info for instrumenting visual editors named
bound: true hidden: true description: The UI object that implements the taskpane group's LookAndFeel.

getUI

public TipOfTheDayUI getUI()
Gets the UI object which implements the L&F for this component.

Overrides:
getUI in class JPanel
Returns:
the TipOfTheDayUI object that implements the TipOfTheDayUI L&F

getUIClassID

public String getUIClassID()
Returns the name of the L&F class that renders this component.

Overrides:
getUIClassID in class JPanel
Returns:
the string uiClassID
See Also:
JComponent.getUIClassID(), UIDefaults.getUI(javax.swing.JComponent)

getModel

public TipOfTheDayModel getModel()

setModel

public void setModel(TipOfTheDayModel model)

getCurrentTip

public int getCurrentTip()

setCurrentTip

public void setCurrentTip(int currentTip)
Sets the index of the tip to show

Parameters:
currentTip -
Throws:
IllegalArgumentException - if currentTip is not within the bounds [0, getModel().getTipCount()[.

nextTip

public void nextTip()
Shows the next tip in the list. It cycles the tip list.


previousTip

public void previousTip()
Shows the previous tip in the list. It cycles the tip list.


showDialog

public void showDialog(Component parentComponent)
                throws HeadlessException
Pops up a "Tip of the day" dialog.

Parameters:
parentComponent -
Throws:
HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
See Also:
GraphicsEnvironment.isHeadless()

showDialog

public boolean showDialog(Component parentComponent,
                          Preferences showOnStartupPref)
                   throws HeadlessException
Pops up a "Tip of the day" dialog. Additionally, it saves the state of the "Show tips on startup" checkbox in a key named "ShowTipOnStartup" in the given Preferences.

Parameters:
parentComponent -
showOnStartupPref -
Returns:
true if the user chooses to see the tips again, false otherwise.
Throws:
HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
IllegalArgumentException - if showOnStartupPref is null
See Also:
GraphicsEnvironment.isHeadless()

showDialog

public boolean showDialog(Component parentComponent,
                          Preferences showOnStartupPref,
                          boolean force)
                   throws HeadlessException
Pops up a "Tip of the day" dialog. Additionally, it saves the state of the "Show tips on startup" checkbox in a key named "ShowTipOnStartup" in the given Preferences.

Parameters:
parentComponent -
showOnStartupPref -
force - if true, the dialog is displayed even if the Preferences is set to hide the dialog
Returns:
true if the user chooses to see the tips again, false otherwise.
Throws:
HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
IllegalArgumentException - if showOnStartupPref is null
See Also:
GraphicsEnvironment.isHeadless()

showDialog

public boolean showDialog(Component parentComponent,
                          JXTipOfTheDay.ShowOnStartupChoice choice)
Pops up a "Tip of the day" dialog. If choice is not null, the method first checks if JXTipOfTheDay.ShowOnStartupChoice.isShowingOnStartup() is true before showing the dialog. Additionally, it saves the state of the "Show tips on startup" checkbox using the given JXTipOfTheDay.ShowOnStartupChoice object.

Parameters:
parentComponent -
choice -
Returns:
true if the user chooses to see the tips again, false otherwise.
Throws:
HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
See Also:
GraphicsEnvironment.isHeadless()

showDialog

public boolean showDialog(Component parentComponent,
                          JXTipOfTheDay.ShowOnStartupChoice choice,
                          boolean force)
Pops up a "Tip of the day" dialog. If choice is not null, the method first checks if force is true or if JXTipOfTheDay.ShowOnStartupChoice.isShowingOnStartup() is true before showing the dialog. Additionally, it saves the state of the "Show tips on startup" checkbox using the given JXTipOfTheDay.ShowOnStartupChoice object.

Parameters:
parentComponent -
choice -
force - if true, the dialog is displayed even if JXTipOfTheDay.ShowOnStartupChoice.isShowingOnStartup() is false
Returns:
true if the user chooses to see the tips again, false otherwise.
Throws:
HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
See Also:
GraphicsEnvironment.isHeadless()

isShowingOnStartup

public static boolean isShowingOnStartup(Preferences showOnStartupPref)
Parameters:
showOnStartupPref -
Returns:
true if the key named "ShowTipOnStartup" is not set to false

forceShowOnStartup

public static void forceShowOnStartup(Preferences showOnStartupPref)
Removes the value set for "ShowTipOnStartup" in the given Preferences to ensure the dialog shown by a later call to showDialog(Component, Preferences) will be visible to the user.

Parameters:
showOnStartupPref -

createDialog

protected JDialog createDialog(Component parentComponent,
                               JXTipOfTheDay.ShowOnStartupChoice choice)
Calls TipOfTheDayUI.createDialog(Component, JXTipOfTheDay.ShowOnStartupChoice). This method can be overriden in order to control things such as the placement of the dialog or its title.

Parameters:
parentComponent -
choice -
Returns:
a JDialog to show this TipOfTheDay pane