나는 동일한 문제가있었습니다. 오른쪽 마우스 클릭뿐만 아니라 똑같은 (복잡한) 메뉴 항목 세트를 가진 최상위 메뉴. 'Action'클래스는 사용 가능성 선택에 대해 이야기하는 경우 고려해야 할 사항이지만 가시성을 다루지는 않으며 제 경우에는 재사용하고 싶은 현재 선택 항목을 기반으로하는 항목의 동적 목록이 있습니다. 그때는 재사용 방법을 쓸 수 있습니다 그래서
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);
}
}
:
그래서 나는 방법을위한 '브릿지'디자인 패턴 (내 생각) 실제로 (있어 addSeparator() 추가() 등) 사용을 구현 결국 메뉴 항목을 계산하고 오른쪽 마우스 클릭을 최상위 메뉴와 동기화합니다.
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();
}});