Class JXTipOfTheDay

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.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.
    Author:
    Frederic Lavigne
    See Also:
    TipLoader, TipOfTheDayModel, TipOfTheDayModel.Tip, showDialog(Component, Preferences), showDialog(Component, ShowOnStartupChoice), Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      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

        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.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String CURRENT_TIP_CHANGED_KEY
      Used when generating PropertyChangeEvents for the "currentTip" property
      static java.lang.String PREFERENCE_KEY
      Key used to store the status of the "Show tip on startup" checkbox"
      static java.lang.String uiClassID
      JXTipOfTheDay pluggable UI key swingx/TipOfTheDayUI
      • Fields inherited from class javax.swing.JComponent

        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

        accessibleContext, 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

      Constructors 
      Constructor Description
      JXTipOfTheDay()
      Constructs a new JXTipOfTheDay with an empty TipOfTheDayModel
      JXTipOfTheDay​(TipOfTheDayModel model)
      Constructs a new JXTipOfTheDay showing tips from the given TipOfTheDayModel.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected javax.swing.JDialog createDialog​(java.awt.Component parentComponent, JXTipOfTheDay.ShowOnStartupChoice choice)
      static void forceShowOnStartup​(java.util.prefs.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.
      java.lang.String getUIClassID()
      Returns the name of the L&F class that renders this component.
      static boolean isShowingOnStartup​(java.util.prefs.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​(java.awt.Component parentComponent)
      Pops up a "Tip of the day" dialog.
      boolean showDialog​(java.awt.Component parentComponent, java.util.prefs.Preferences showOnStartupPref)
      Pops up a "Tip of the day" dialog.
      boolean showDialog​(java.awt.Component parentComponent, java.util.prefs.Preferences showOnStartupPref, boolean force)
      Pops up a "Tip of the day" dialog.
      boolean showDialog​(java.awt.Component parentComponent, JXTipOfTheDay.ShowOnStartupChoice choice)
      Pops up a "Tip of the day" dialog.
      boolean showDialog​(java.awt.Component parentComponent, JXTipOfTheDay.ShowOnStartupChoice choice, 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 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, getBaseline, getBaselineResizeBehavior, 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, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, 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, 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, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • uiClassID

        public static final java.lang.String uiClassID
        JXTipOfTheDay pluggable UI key swingx/TipOfTheDayUI
        See Also:
        Constant Field Values
      • PREFERENCE_KEY

        public static final java.lang.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 java.lang.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 javax.swing.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)
      • getUI

        public TipOfTheDayUI getUI()
        Gets the UI object which implements the L&F for this component.
        Overrides:
        getUI in class javax.swing.JPanel
        Returns:
        the TipOfTheDayUI object that implements the TipOfTheDayUI L&F
      • getUIClassID

        public java.lang.String getUIClassID()
        Returns the name of the L&F class that renders this component.
        Overrides:
        getUIClassID in class javax.swing.JPanel
        Returns:
        the string uiClassID
        See Also:
        JComponent.getUIClassID(), UIDefaults.getUI(javax.swing.JComponent)
      • getCurrentTip

        public int getCurrentTip()
      • setCurrentTip

        public void setCurrentTip​(int currentTip)
        Sets the index of the tip to show
        Parameters:
        currentTip -
        Throws:
        java.lang.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​(java.awt.Component parentComponent)
                        throws java.awt.HeadlessException
        Pops up a "Tip of the day" dialog.
        Parameters:
        parentComponent -
        Throws:
        java.awt.HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
        See Also:
        GraphicsEnvironment.isHeadless()
      • showDialog

        public boolean showDialog​(java.awt.Component parentComponent,
                                  java.util.prefs.Preferences showOnStartupPref)
                           throws java.awt.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:
        java.awt.HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
        java.lang.IllegalArgumentException - if showOnStartupPref is null
        See Also:
        GraphicsEnvironment.isHeadless()
      • showDialog

        public boolean showDialog​(java.awt.Component parentComponent,
                                  java.util.prefs.Preferences showOnStartupPref,
                                  boolean force)
                           throws java.awt.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:
        java.awt.HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
        java.lang.IllegalArgumentException - if showOnStartupPref is null
        See Also:
        GraphicsEnvironment.isHeadless()
      • showDialog

        public boolean showDialog​(java.awt.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:
        java.awt.HeadlessException - if GraphicsEnvironment.isHeadless() returns true.
        See Also:
        GraphicsEnvironment.isHeadless()
      • isShowingOnStartup

        public static boolean isShowingOnStartup​(java.util.prefs.Preferences showOnStartupPref)
        Parameters:
        showOnStartupPref -
        Returns:
        true if the key named "ShowTipOnStartup" is not set to false
      • forceShowOnStartup

        public static void forceShowOnStartup​(java.util.prefs.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 -