Can I add submenus to context or main menus, instead of single menu items?
Note: These pages are being reviewed.
Yes, any place where the APIs expect to have an item installed into a context or main menu, you can provide a submenu instead.
Provide a dummy
Action (it can be a do-nothing subclass of
javax.swing.AbstractAction), or in some cases the class need not even be an
Action at all. For context menus, implement the interface
Presenter.Popup on your
Action, and have it return a
Similarly, you can implement other subinterfaces of
Presenter to provide a different component to display in toolbars or the main menu.
Note about using alternate components in the main menu: If you want your action to work properly on Mac OS, you probably don’t want to return anything other than a
getMenuPresenter() if you implement Presenter.Menu. In general, Swing allows you to treat menu popups as generic Swing containers you can put what you like into. This is not true at all of the Mac OS screen menu bar - it expects normal menu items, and will not handle unusual contents for menus.
If you just return a
getMenuPresenter it will always be displayed, though you can conditionally disable it. If you wish to sometimes hide (not just disable) the submenu, make it implement DynamicMenuContent and you can make the submenu appear or disappear whenever you like (or even provide more than one menu item / submenu).