У меня была та же проблема. Щелчок правой кнопкой мыши, а также верхнее меню с точно таким же (сложным) набором элементов меню. Класс «Action» - это то, что нужно учитывать, если вы говорите о вариантах выбора, но это не касается видимости, и в моем случае также был динамический список записей, основанный на текущем выборе, который я хотел повторно использовать.
Так что я в конечном итоге реализации шаблона «мост» дизайн (я думаю) для методов я использую (добавить() и addSeparator()):
public static class MenuBridge
{
private JPopupMenu popupMenu;
private JMenu menu;
public MenuBridge(JPopupMenu popupMenu)
{
this.popupMenu = popupMenu;
}
public MenuBridge(JMenu menu)
{
this.menu = menu;
}
public void addSeparator()
{
if(popupMenu!=null) popupMenu.addSeparator();
else menu.addSeparator();
}
public void add(JMenuItem item)
{
if(popupMenu!=null) popupMenu.add(item);
else menu.add(item);
}
}
Итак, я могу написать многоразовый метод который вычисляет пункты меню и синхронизирует мой правый щелчок мыши с меню верхнего уровня:
public void addTaskMenuItems(DefaultMenu menu, List<MDProcTask> taskList)
{
...
menu.add()/menu.addSeparator()
...
}
addTaskMenuItems(new DefaultMenu(popupMenu),taskList);
...
taskMenu.addMenuListener(new MenuListener() {
public void menuCanceled(MenuEvent menuevent)
{
}
public void menuDeselected(MenuEvent menuevent)
{
}
public void menuSelected(MenuEvent menuevent)
{
taskMenu.removeAll();
addTaskMenuItems(new DefaultMenu(taskMenu),getSelectedTasks());
taskMenu.revalidate();
}});