2013-07-01 2 views
1

JMenu를 클릭하거나 인접한 JMenu를 클릭 한 다음 마우스를 드래그하면 기본 동작은 펼쳐서 하위 메뉴와 메뉴 항목을 표시하는 것입니다. 이 (메뉴를 펼쳤을 때) 이벤트가 발생할 때와 같은 추가 동작을 연관시킬 수 있습니까?JMenu를 펼칠 때 어떻게해야합니까?

+1

테스트에서 내 대답을 삭제했습니다. 맹목적으로 잘못되었습니다. 죄송합니다. –

+2

@ user2460978 서브 메뉴가 보류되고있는 것을 알고 싶으면'PopupListener'를 메뉴'JPopupMenu'에 첨부 할 필요가 있습니다. 기점에 대해서는'JMenu # getPopupMenu'를 참조하십시오. – MadProgrammer

답변

3

이벤트 리스너 클래스는 JMenus를 위해 특별히 있습니다

javax.swing.event.MenuListener 

javax.swing.event.MenuDragMouseListener 

구성 요소에 연결하기 위해 호출해야하는 메서드는

01입니다.

JMenuComponentName.addMenuListener(MenuListener m);JMenuComponentName.addMenuMouseDragListener(MenuDragMouseListener m);입니다.

3

MenuListener을 사용하면 메뉴 상태에 대한 정보를 얻을 수 있습니다.

이 간단한 예 ... 새 메뉴 항목을 메뉴를 열 때마다 생성

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.event.MenuEvent; 
import javax.swing.event.MenuListener; 

public class TestMenuBar { 

    public static void main(String[] args) { 
     new TestMenuBar(); 
    } 

    public TestMenuBar() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JMenuBar mb = new JMenuBar(); 
       JMenu main = new JMenu("Test"); 
       mb.add(main); 

       main.addMenuListener(new MenuListener() { 
        @Override 
        public void menuSelected(MenuEvent e) { 
         System.out.println("Selected"); 
         JMenu menu = (JMenu) e.getSource(); 

         menu.add(new JMenuItem("I'm dynamiclly created")); 
        } 

        @Override 
        public void menuDeselected(MenuEvent e) { 
         System.out.println("deselected"); 
        } 

        @Override 
        public void menuCanceled(MenuEvent e) { 
         System.out.println("Canceled"); 
        } 
       }); 

       JFrame frame = new JFrame("Testing"); 
       frame.setJMenuBar(mb); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.setSize(200, 200); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    }   
} 
관련 문제