Package jmri.util

Class MenuScroller

  • All Implemented Interfaces:
    java.awt.event.MouseWheelListener, java.util.EventListener

    public class MenuScroller
    extends java.lang.Object
    implements java.awt.event.MouseWheelListener
    A class that provides scrolling capabilities to a long menu dropdown or popup menu. A number of items can optionally be frozen at the top and/or bottom of the menu.

    Implementation note: The default number of items to display at a time is 15, and the default scrolling interval is 125 milliseconds.

    • Constructor Summary

      Constructors 
      Constructor Description
      MenuScroller​(javax.swing.JMenu menu)
      Construct a MenuScroller that scrolls a menu with the default number of items to display at a time, and default scrolling interval.
      MenuScroller​(javax.swing.JMenu menu, int scrollCount)
      Construct a MenuScroller that scrolls a menu with the specified number of items to display at a time, and default scrolling interval.
      MenuScroller​(javax.swing.JMenu menu, int scrollCount, int interval)
      Construct a MenuScroller that scrolls a menu with the specified number of items to display at a time, and specified scrolling interval.
      MenuScroller​(javax.swing.JMenu menu, int scrollCount, int interval, int topFixedCount, int bottomFixedCount)
      Construct a MenuScroller that scrolls a menu with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the menu.
      MenuScroller​(javax.swing.JPopupMenu menu)
      Construct a MenuScroller that scrolls a popup menu with the default number of items to display at a time, and default scrolling interval.
      MenuScroller​(javax.swing.JPopupMenu menu, int scrollCount)
      Construct a MenuScroller that scrolls a popup menu with the specified number of items to display at a time, and default scrolling interval.
      MenuScroller​(javax.swing.JPopupMenu menu, int scrollCount, int interval)
      Construct a MenuScroller that scrolls a popup menu with the specified number of items to display at a time, and specified scrolling interval.
      MenuScroller​(javax.swing.JPopupMenu menu, int scrollCount, int interval, int topFixedCount, int bottomFixedCount)
      Construct a MenuScroller that scrolls a popup menu with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the popup menu.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void dispose()
      Remove this MenuScroller from the associated menu and restores the default behavior of the menu.
      protected void finalize()
      Ensure that the dispose method of this MenuScroller is called when there are no more refrences to it.
      int getBottomFixedCount()
      Return the number of items fixed at the bottom of the menu or popup menu.
      int getInterval()
      Return the scroll interval in milliseconds.
      int getscrollCount()
      Return the number of items in the scrolling portion of the menu.
      int getTopFixedCount()
      Return the number of items fixed at the top of the menu or popup menu.
      void keepVisible​(int index)
      Scroll the item at the specified index into view each time the menu is opened.
      void keepVisible​(javax.swing.JMenuItem item)
      Scroll the specified item into view each time the menu is opened.
      void mouseWheelMoved​(java.awt.event.MouseWheelEvent e)  
      void setBottomFixedCount​(int bottomFixedCount)
      Set the number of items to fix at the bottom of the menu or popup menu.
      void setInterval​(int interval)
      Set the scroll interval in milliseconds.
      void setScrollCount​(int scrollCount)
      Set the number of items in the scrolling portion of the menu.
      static MenuScroller setScrollerFor​(javax.swing.JMenu menu)
      Register a menu to be scrolled with the default number of items to display at a time and the default scrolling interval.
      static MenuScroller setScrollerFor​(javax.swing.JMenu menu, int scrollCount)
      Register a menu to be scrolled with the default number of items to display at a time and the specified scrolling interval.
      static MenuScroller setScrollerFor​(javax.swing.JMenu menu, int scrollCount, int interval)
      Register a menu to be scrolled, with the specified number of items to display at a time and the specified scrolling interval.
      static MenuScroller setScrollerFor​(javax.swing.JMenu menu, int scrollCount, int interval, int topFixedCount, int bottomFixedCount)
      Register a menu to be scrolled, with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the menu.
      static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu)
      Register a popup menu to be scrolled with the default number of items to display at a time and the default scrolling interval.
      static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu, int scrollCount)
      Register a popup menu to be scrolled with the default number of items to display at a time and the specified scrolling interval.
      static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu, int scrollCount, int interval)
      Register a popup menu to be scrolled, with the specified number of items to display at a time and the specified scrolling interval.
      static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu, int scrollCount, int interval, int topFixedCount, int bottomFixedCount)
      Register a popup menu to be scrolled, with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the popup menu.
      void setTopFixedCount​(int topFixedCount)
      Set the number of items to fix at the top of the menu or popup menu.
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • MenuScroller

        public MenuScroller​(javax.swing.JMenu menu)
        Construct a MenuScroller that scrolls a menu with the default number of items to display at a time, and default scrolling interval.
        Parameters:
        menu - the menu
      • MenuScroller

        public MenuScroller​(javax.swing.JPopupMenu menu)
        Construct a MenuScroller that scrolls a popup menu with the default number of items to display at a time, and default scrolling interval.
        Parameters:
        menu - the popup menu
      • MenuScroller

        public MenuScroller​(javax.swing.JMenu menu,
                            int scrollCount)
        Construct a MenuScroller that scrolls a menu with the specified number of items to display at a time, and default scrolling interval.
        Parameters:
        menu - the menu
        scrollCount - the number of items to display at a time
        Throws:
        java.lang.IllegalArgumentException - if scrollCount is 0 or negative
      • MenuScroller

        public MenuScroller​(javax.swing.JPopupMenu menu,
                            int scrollCount)
        Construct a MenuScroller that scrolls a popup menu with the specified number of items to display at a time, and default scrolling interval.
        Parameters:
        menu - the popup menu
        scrollCount - the number of items to display at a time
        Throws:
        java.lang.IllegalArgumentException - if scrollCount is 0 or negative
      • MenuScroller

        public MenuScroller​(javax.swing.JMenu menu,
                            int scrollCount,
                            int interval)
        Construct a MenuScroller that scrolls a menu with the specified number of items to display at a time, and specified scrolling interval.
        Parameters:
        menu - the menu
        scrollCount - the number of items to display at a time
        interval - the scroll interval, in milliseconds
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative
      • MenuScroller

        public MenuScroller​(javax.swing.JPopupMenu menu,
                            int scrollCount,
                            int interval)
        Construct a MenuScroller that scrolls a popup menu with the specified number of items to display at a time, and specified scrolling interval.
        Parameters:
        menu - the popup menu
        scrollCount - the number of items to display at a time
        interval - the scroll interval, in milliseconds
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative
      • MenuScroller

        public MenuScroller​(javax.swing.JMenu menu,
                            int scrollCount,
                            int interval,
                            int topFixedCount,
                            int bottomFixedCount)
        Construct a MenuScroller that scrolls a menu with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the menu.
        Parameters:
        menu - the menu
        scrollCount - the number of items to display in the scrolling portion
        interval - the scroll interval, in milliseconds
        topFixedCount - the number of items to fix at the top. May be 0
        bottomFixedCount - the number of items to fix at the bottom. May be 0
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative or if topFixedCount or bottomFixedCount is negative
      • MenuScroller

        public MenuScroller​(javax.swing.JPopupMenu menu,
                            int scrollCount,
                            int interval,
                            int topFixedCount,
                            int bottomFixedCount)
        Construct a MenuScroller that scrolls a popup menu with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the popup menu.
        Parameters:
        menu - the popup menu
        scrollCount - the number of items to display in the scrolling portion
        interval - the scroll interval, in milliseconds
        topFixedCount - the number of items to fix at the top. May be 0
        bottomFixedCount - the number of items to fix at the bottom. May be 0
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative or if topFixedCount or bottomFixedCount is negative
    • Method Detail

      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JMenu menu)
        Register a menu to be scrolled with the default number of items to display at a time and the default scrolling interval.
        Parameters:
        menu - the menu
        Returns:
        the MenuScroller
      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu)
        Register a popup menu to be scrolled with the default number of items to display at a time and the default scrolling interval.
        Parameters:
        menu - the popup menu
        Returns:
        the MenuScroller
      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JMenu menu,
                                                  int scrollCount)
        Register a menu to be scrolled with the default number of items to display at a time and the specified scrolling interval.
        Parameters:
        menu - the menu
        scrollCount - the number of items to display at a time
        Returns:
        the MenuScroller
        Throws:
        java.lang.IllegalArgumentException - if scrollCount is 0 or negative
      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu,
                                                  int scrollCount)
        Register a popup menu to be scrolled with the default number of items to display at a time and the specified scrolling interval.
        Parameters:
        menu - the popup menu
        scrollCount - the number of items to display at a time
        Returns:
        the MenuScroller
        Throws:
        java.lang.IllegalArgumentException - if scrollCount is 0 or negative
      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JMenu menu,
                                                  int scrollCount,
                                                  int interval)
        Register a menu to be scrolled, with the specified number of items to display at a time and the specified scrolling interval.
        Parameters:
        menu - the menu
        scrollCount - the number of items to be displayed at a time
        interval - the scroll interval, in milliseconds
        Returns:
        the MenuScroller
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative
      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu,
                                                  int scrollCount,
                                                  int interval)
        Register a popup menu to be scrolled, with the specified number of items to display at a time and the specified scrolling interval.
        Parameters:
        menu - the popup menu
        scrollCount - the number of items to be displayed at a time
        interval - the scroll interval, in milliseconds
        Returns:
        the MenuScroller
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative
      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JMenu menu,
                                                  int scrollCount,
                                                  int interval,
                                                  int topFixedCount,
                                                  int bottomFixedCount)
        Register a menu to be scrolled, with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the menu.
        Parameters:
        menu - the menu
        scrollCount - the number of items to display in the scrolling portion
        interval - the scroll interval, in milliseconds
        topFixedCount - the number of items to fix at the top. May be 0.
        bottomFixedCount - the number of items to fix at the bottom. May be 0
        Returns:
        the MenuScroller
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative or if topFixedCount or bottomFixedCount is negative
      • setScrollerFor

        public static MenuScroller setScrollerFor​(javax.swing.JPopupMenu menu,
                                                  int scrollCount,
                                                  int interval,
                                                  int topFixedCount,
                                                  int bottomFixedCount)
        Register a popup menu to be scrolled, with the specified number of items to display in the scrolling region, the specified scrolling interval, and the specified numbers of items fixed at the top and bottom of the popup menu.
        Parameters:
        menu - the popup menu
        scrollCount - the number of items to display in the scrolling portion
        interval - the scroll interval, in milliseconds
        topFixedCount - the number of items to fix at the top. May be 0
        bottomFixedCount - the number of items to fix at the bottom. May be 0
        Returns:
        the MenuScroller
        Throws:
        java.lang.IllegalArgumentException - if scrollCount or interval is 0 or negative or if topFixedCount or bottomFixedCount is negative
      • mouseWheelMoved

        public void mouseWheelMoved​(java.awt.event.MouseWheelEvent e)
        Specified by:
        mouseWheelMoved in interface java.awt.event.MouseWheelListener
      • getInterval

        public int getInterval()
        Return the scroll interval in milliseconds.
        Returns:
        the scroll interval in milliseconds
      • setInterval

        public void setInterval​(int interval)
        Set the scroll interval in milliseconds.
        Parameters:
        interval - the scroll interval in milliseconds
        Throws:
        java.lang.IllegalArgumentException - if interval is 0 or negative
      • getscrollCount

        public int getscrollCount()
        Return the number of items in the scrolling portion of the menu.
        Returns:
        the number of items to display at a time
      • setScrollCount

        public void setScrollCount​(int scrollCount)
        Set the number of items in the scrolling portion of the menu.
        Parameters:
        scrollCount - the number of items to display at a time
        Throws:
        java.lang.IllegalArgumentException - if scrollCount is 0 or negative
      • getTopFixedCount

        public int getTopFixedCount()
        Return the number of items fixed at the top of the menu or popup menu.
        Returns:
        the number of items
      • setTopFixedCount

        public void setTopFixedCount​(int topFixedCount)
        Set the number of items to fix at the top of the menu or popup menu.
        Parameters:
        topFixedCount - the number of items
      • getBottomFixedCount

        public int getBottomFixedCount()
        Return the number of items fixed at the bottom of the menu or popup menu.
        Returns:
        the number of items
      • setBottomFixedCount

        public void setBottomFixedCount​(int bottomFixedCount)
        Set the number of items to fix at the bottom of the menu or popup menu.
        Parameters:
        bottomFixedCount - the number of items
      • keepVisible

        public void keepVisible​(javax.swing.JMenuItem item)
        Scroll the specified item into view each time the menu is opened. Call this method with null to restore the default behavior, which is to show the menu as it last appeared.
        Parameters:
        item - the item to keep visible
        See Also:
        keepVisible(int)
      • keepVisible

        public void keepVisible​(int index)
        Scroll the item at the specified index into view each time the menu is opened. Call this method with -1 to restore the default behavior, which is to show the menu as it last appeared.
        Parameters:
        index - the index of the item to keep visible
        See Also:
        keepVisible(javax.swing.JMenuItem)
      • dispose

        public void dispose()
        Remove this MenuScroller from the associated menu and restores the default behavior of the menu.
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Ensure that the dispose method of this MenuScroller is called when there are no more refrences to it.
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable - if an error occurs.
        See Also:
        dispose()