2014-07-12 3 views
-5

Comment puis-je récupérer le menu ou l'élément de menu actuellement sélectionné lorsque vous cliquez dessus et le chemin suivant sera imprimé sur la console. Dans ce code, j'ai fait les menus et sous-menus jusqu'à 4 niveaux. Et souhaitez imprimer le chemin des menus et des sous-menus sélectionnés lorsque vous cliquez dessus. J'utilise le concept de swing pour ce programme. S'il vous plaît aider. Merci d'avance.Comment obtenir le menu ou l'élément de menu actuellement sélectionné

import java.awt.Component; 
import java.awt.event.KeyEvent; 

import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.MenuElement; 
import javax.swing.MenuSelectionManager; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class Menu { 

    public static void main(final String args[]) { 
    JFrame frame = new JFrame("MenuSample Example"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
JMenuBar menuBar = new JMenuBar(); 

JMenu worldMenu = new JMenu("world"); 
menuBar.add(worldMenu); 


JMenu indMenu = new JMenu("India"); 
worldMenu.add(indMenu); 
/* creates menu */ 
JMenu odMenu = new JMenu("Odisha"); 
indMenu.add(odMenu); 

JMenu delhiMenu = new JMenu("Delhi"); 
indMenu.add(delhiMenu); 

JMenu upMenu = new JMenu("Uttar Pradesh"); 
indMenu.add(upMenu); 

JMenu mpMenu = new JMenu("Madhya Pradesh"); 
    indMenu.add(mpMenu); 

    JMenu ausMenu = new JMenu("Australia"); 
worldMenu.add(ausMenu); 

JMenu AmericaMenu = new JMenu("America"); 
worldMenu.add(AmericaMenu); 

/* creates submenu */ 
JMenu bbMenu = new JMenu("Bhubaneswar"); 
odMenu.add(bbMenu); 

JMenu bmMenu = new JMenu("Berhampur"); 
odMenu.add(bmMenu); 
/*creates sub sub menu */ 
JMenuItem rjMenuItem = new JMenuItem("Raj Mahal"); 
bbMenu.add(rjMenuItem); 

JMenuItem abMenuItem = new JMenuItem("Acharya Bihar"); 
bbMenu.add(abMenuItem); 

JMenuItem bnMenuItem = new JMenuItem("Bani Bihar"); 
bbMenu.add(bnMenuItem); 
/* retrieving path */ 

MenuSelectionManager.defaultManager().addChangeListener(
     new ChangeListener() { 
      public void stateChanged(ChangeEvent evt) { 

      MenuElement[] path = MenuSelectionManager.defaultManager() 
       .getSelectedPath(); 

      // 
      int s=0; 

      for (int i = 0; i < path.length; i++) { 
       Component c = path[i].getComponent(); 
       if (c instanceof JMenuItem) { 
       JMenuItem mi = (JMenuItem) c; 
       String label = mi.getText(); 
       System.out.println("LEVEL----" + s); 
       System.out.println("you hv selected:"+label); 
       s++; 


       } 
      } 

      } 
     }); 

    // 

    frame.setJMenuBar(menuBar); 
    frame.setSize(350, 250); 
    frame.setVisible(true); 
    } 
} 
+2

veuillez poster ce que vous avez essayé? –

+0

a publié le code @TamilSelvan –

+0

Et ce qui ne fonctionne pas dans votre code? – MadProgrammer

Répondre

0

Comment obtenir actuellement sélectionné

  1. Menu - Un parent JMenu ne peut pas être sélectionné. Pourquoi voudriez-vous savoir si la souris est dessus?
  2. MenuItem - Embrassez l'interface d'action

Il est un oubli trop souvent pour ne pas utiliser le Action interface. En développant avec Swing faites agir votre ami, il vous traitera bien. Vous vous êtes trompé de chemin avec MenuSelectionManager.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 

public class MenuExample { 
    private JFrame frame; 
    private JLabel choiceIndicator; 

    MenuExample create() { 
     frame = createFrame(); 
     choiceIndicator = new JLabel(); 
     frame.setJMenuBar(createMenuBar()); 
     frame.getContentPane().add(createContent()); 

     return this; 
    } 

    private Component createContent() { 
     JPanel panel = new JPanel(); 

     panel.add(new JLabel("Last menu item choice:")); 
     panel.add(choiceIndicator); 

     return panel; 
    } 

    private JMenuBar createMenuBar() { 
     JMenuBar menuBar = new JMenuBar(); 
     menuBar.add(createWorld()); 
     return menuBar; 
    } 

    private JMenu createWorld() { 
     JMenu worldMenu = new JMenu("World"); 

     worldMenu.add(createIndia()); 
     worldMenu.add(new JMenu("Australia")); 
     worldMenu.add(new JMenu("America")); 

     return worldMenu; 
    } 

    private JMenu createIndia() { 
     JMenu india = new JMenu("India"); 

     india.add(createOdisha()); 
     india.add(new JMenu("Delhi")); 
     india.add(new JMenu("Uttar Pradesh")); 
     india.add(new JMenu("Madhya Pradesh")); 

     return india; 
    } 

    private JMenuItem createOdisha() { 
     JMenu menu = new JMenu("Odisha"); 

     menu.add(createBhubaneswar()); 
     menu.add(new JMenu("Berhampur")); 

     return menu; 
    } 

    private JMenuItem createBhubaneswar() { 
     JMenu menu = new JMenu("Bhubaneswar"); 
     menu.add(choiceItem("Raj Mahal")); 
     menu.add(choiceItem("Acharya Bihar")); 
     menu.add(choiceItem("Bani Bihar")); 

     return menu; 
    } 

    private JMenuItem choiceItem(String text) { 
     return new JMenuItem(new Choice(text, choiceIndicator)); 
    } 

    private JFrame createFrame() { 
     JFrame frame = new JFrame(getClass().getSimpleName()); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     return frame; 
    } 

    void show() { 
     frame.setSize(350, 250); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new MenuExample().create().show(); 
      } 
     }); 
    } 

    class Choice extends AbstractAction { 
     private final JLabel choiceIndicator; 

     public Choice(String text, JLabel choiceIndicator) { 
      this(text, null, null, null, choiceIndicator); 
     } 

     public Choice(String text, ImageIcon icon, String desc, Integer mnemonic, JLabel choiceIndicator) { 
      super(text, icon); 
      putValue(SHORT_DESCRIPTION, desc); 
      putValue(MNEMONIC_KEY, mnemonic); 

      this.choiceIndicator = choiceIndicator; 
     } 

     public void actionPerformed(ActionEvent e) { 
      choiceIndicator.setText(e.getActionCommand()); 
     } 
    } 
} 
+0

Merci beaucoup monsieur, je vais garder à l'esprit tous ces concepts que vous avez mentionnés. –

Questions connexes