/** {@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; } }