/** {@inheritDoc} */
 @Override
 public void addMenuItemsWithExpansion(
     List<JMenuItem> menuItems,
     JMenu parentMenu,
     int maxItemsInMenu,
     ComponentFactory headerItemFactory) {
   if (menuItems.size() <= maxItemsInMenu) {
     // Just add them directly
     for (JMenuItem menuItem : menuItems) parentMenu.add(menuItem);
     return;
   }
   int index = 0;
   while (index < menuItems.size()) {
     int toIndex = min(menuItems.size(), index + maxItemsInMenu);
     if (toIndex == menuItems.size() - 1)
       // Don't leave a single item left for the last subMenu
       toIndex--;
     List<JMenuItem> subList = menuItems.subList(index, toIndex);
     JMenuItem firstItem = subList.get(0);
     JMenuItem lastItem = subList.get(subList.size() - 1);
     JMenu subMenu = new JMenu(firstItem.getText() + " ... " + lastItem.getText());
     if (headerItemFactory != null) subMenu.add(headerItemFactory.makeComponent());
     for (JMenuItem menuItem : subList) subMenu.add(menuItem);
     parentMenu.add(subMenu);
     index = toIndex;
   }
 }