2010-12-11 2 views
1

팝업 메뉴가있는 응용 프로그램이 있습니다. 일반적인 방법으로 팝업을 사용하고 싶습니다. 즉, 사용자가 윈도우의 아무 곳이나 마우스 오른쪽 버튼을 클릭 할 때 표시되어야합니다.하지만 창 상단의 기본 MenuBar에 연결하고 싶습니다. 어떻게해야할지 모르겠습니다.JMenuBar에 JPopupMenu를 추가하는 방법은 무엇입니까?

myJMenuBar.add (myPopupMenu) 을 호출하는 것만 큼 간단하지만이 방법은 효과가 없다고 생각했습니다.

JMenuBar.add()는 JPopupMenu가 아닌 JMenu 매개 변수를 원합니다.

누구에게 의견이 있습니까?

답변

0

JPopupMenu 개체를 다시 사용하는 대신 가장 좋은 방법은 메뉴가 수행하는 작업을 캡슐화하고 다시 사용하는 것입니다. 메뉴 항목처럼 팝업이 해당 작업을 트리거합니다. 가입일

ActionJavaDoc :

  • 하나 이상의 텍스트 :

    ActionListener 인터페이스에 의해 정의 actionPerformed 메소드 이외에

    는,이 인터페이스는 단일 장소에서 정의하는 애플리케이션을 허용 함수를 설명하는 문자열 이 문자열은 예를 들어 버튼의 플라이 오버 텍스트를 표시하거나 메뉴 항목의 텍스트를 설정하는 데 사용할 수 있습니다.

  • 기능을 나타내는 하나 이상의 아이콘. 이 아이콘은 메뉴 컨트롤의 이미지 나보다 복잡한 사용자 인터페이스의 합성 항목에 사용할 수 있습니다.
  • 기능의 활성화/비활성화 상태입니다. 메뉴 항목과 도구 모음 단추를 별도로 비활성화해야하는 대신 응용 프로그램에서이 인터페이스를 구현하는 기능을 비활성화 할 수 있습니다. 상태 변경을 위해 리스너로 등록 된 모든 구성 요소는 해당 항목에 대한 이벤트 생성을 비활성화하고 이에 따라 디스플레이를 수정하는 것을 알고 있습니다.

JPopupMenu, JToolBar

JMenu 모든 구성 요소를 생성하고, 해당 기기의 동작을 설정하기위한 편리한 방법을 제공한다. 자세한 내용은 각 클래스를 참조하십시오.

0

나는 동일한 문제가있었습니다. 오른쪽 마우스 클릭뿐만 아니라 똑같은 (복잡한) 메뉴 항목 세트를 가진 최상위 메뉴. '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(); 
     }}); 
관련 문제