2014-07-12 69 views
-5

我怎样才能检索到当前选择的菜单或菜单项上点击它和随后的路径将在控制台上进行打印时。在这段代码中,我完成了4层菜单和子菜单。并且想要打印点击时所选菜单和子菜单的路径。我为这个程序使用了swing概念。请帮忙。提前致谢。如何获得当前选定的菜单或菜单项

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

请发表你试过吗? –

+0

发布了代码@TamilSelvan –

+0

什么不是在你的代码中工作? – MadProgrammer

回答

0

如何获得当前选定的

  1. 菜单 - JMenu的,不能选择父母。为什么你想知道 如果鼠标结束了?
  2. 菜单项 - 拥抱Action接口

这是一个很常见的监督,不使用Action interface。当用Swing开发使Action成为你的朋友时,它会很好的对待你。你用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

非常感谢主席先生,我会牢记所有这些你提到的概念。 –

相关问题