私は同じ問題がありました。右マウス・クリックだけでなく、全く同じ(複雑な)メニュー項目のセットを持つトップ・メニュー。 「アクション」クラスは、使用可能な選択肢について話している場合には考慮する必要がありますが、可視性を扱うのではなく、私が再利用したい現在の選択肢に基づいてエントリの動的リストがあります。
だから私は、私が実際に使用した方法のための「橋」の設計パターンを(と思う)実装することになった((追加)と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();
}});