2011-10-05 68 views
5

Me gustaría agregar el menú contextual para mi programa. Añadí menú basit con el siguiente código:Cómo crear un menú emergente con submenú en Java

  Pmenu = new JPopupMenu("Menu"); 
      menuItem = new JMenuItem("Sections"); 
      Pmenu.add(menuItem); 
      menuItem = new JMenuItem("Numbers"); 
      Pmenu.add(menuItem); 

Sin embargo, quiero añadir submenú para estos menús, como el usuario pase el Menú de secciones, submenú se abrirá y se muestran secciones.

Respuesta

12

Nombre Primer objeto por lo general comienzan con una letra minúscula, tapas de letra usado generalmente para los nombres de clase/interfaz.

para su cuestión, el código de submenú

//parent menu 
JPopupMenu pmenu = new JPopupMenu("Menu"); 

//sub menu 
JMenu sectionsMenu = new JMenu("Sections"); 
JMenuItem menuItem1 = new JMenuItem("Item1"); 
sectionsMenu .add(menuItem1); 
JMenuItem menuItem2 = new JMenuItem("Item2"); 
sectionsMenu .add(menuItem2); 

pmenu.add(menuItem); 

//regular menu item 
menuItem = new JMenuItem("Numbers"); 
Pmenu.add(menuItem); 

Jmenu tutorial o submenu examble

+2

+1 Convenciones de nomenclatura de Java – mKorbel

4

Agregue una instancia JMenu a su JPopupMenu. El JMenu debería contener JMenuItem instancias.

Consulte http://download.oracle.com/javase/tutorial/uiswing/components/menu.html para obtener un tutorial sobre los menús en Swing.

+0

Solía ​​JMenu en mi barra de menú, pero ¿cómo debería mostrar ese menú en la ubicación exacta cuando el usuario hizo clic derecho? – CanCeylan

+2

Utilice myPanel.setComponentPopupMenu (popupMenu), y el menú emergente aparecerá cuando haga clic derecho en myPanel. –

0
public JMenuBar createMenuBar() { 
    JMenuBar menuBar; 
    JMenu menu, submenu; 
    JMenuItem menuItem; 
    JRadioButtonMenuItem rbMenuItem; 
    JCheckBoxMenuItem cbMenuItem; 

    //Create the menu bar. 
    menuBar = new JMenuBar(); 

    //Build the first menu. 
    menu = new JMenu("A Menu"); 
    menu.setMnemonic(KeyEvent.VK_A); 
    menu.getAccessibleContext().setAccessibleDescription(
      "The only menu in this program that has menu items"); 
    menuBar.add(menu); 

    //a group of JMenuItems 
    menuItem = new JMenuItem("A text-only menu item", 
          KeyEvent.VK_T); 
    //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead 
    menuItem.setAccelerator(KeyStroke.getKeyStroke(
      KeyEvent.VK_1, ActionEvent.ALT_MASK)); 
    menuItem.getAccessibleContext().setAccessibleDescription(
      "This doesn't really do anything"); 
    menuItem.addActionListener(this); 
    menu.add(menuItem); 

    ImageIcon icon = createImageIcon("images/middle.gif"); 
    menuItem = new JMenuItem("Both text and icon", icon); 
    menuItem.setMnemonic(KeyEvent.VK_B); 
    menuItem.addActionListener(this); 
    menu.add(menuItem); 

    menuItem = new JMenuItem(icon); 
    menuItem.setMnemonic(KeyEvent.VK_D); 
    menuItem.addActionListener(this); 
    menu.add(menuItem); 

    //a group of radio button menu items 
    menu.addSeparator(); 
    ButtonGroup group = new ButtonGroup(); 

    rbMenuItem = new JRadioButtonMenuItem("A radio button menu item"); 
    rbMenuItem.setSelected(true); 
    rbMenuItem.setMnemonic(KeyEvent.VK_R); 
    group.add(rbMenuItem); 
    rbMenuItem.addActionListener(this); 
    menu.add(rbMenuItem); 

    rbMenuItem = new JRadioButtonMenuItem("Another one"); 
    rbMenuItem.setMnemonic(KeyEvent.VK_O); 
    group.add(rbMenuItem); 
    rbMenuItem.addActionListener(this); 
    menu.add(rbMenuItem); 

    //a group of check box menu items 
    menu.addSeparator(); 
    cbMenuItem = new JCheckBoxMenuItem("A check box menu item"); 
    cbMenuItem.setMnemonic(KeyEvent.VK_C); 
    cbMenuItem.addItemListener(this); 
    menu.add(cbMenuItem); 

    cbMenuItem = new JCheckBoxMenuItem("Another one"); 
    cbMenuItem.setMnemonic(KeyEvent.VK_H); 
    cbMenuItem.addItemListener(this); 
    menu.add(cbMenuItem); 

    //a submenu 
    menu.addSeparator(); 
    submenu = new JMenu("A submenu"); 
    submenu.setMnemonic(KeyEvent.VK_S); 

    menuItem = new JMenuItem("An item in the submenu"); 
    menuItem.setAccelerator(KeyStroke.getKeyStroke(
      KeyEvent.VK_2, ActionEvent.ALT_MASK)); 
    menuItem.addActionListener(this); 
    submenu.add(menuItem); 

    menuItem = new JMenuItem("Another item"); 
    menuItem.addActionListener(this); 
    submenu.add(menuItem); 
    menu.add(submenu); 

    //Build second menu in the menu bar. 
    menu = new JMenu("Another Menu"); 
    menu.setMnemonic(KeyEvent.VK_N); 
    menu.getAccessibleContext().setAccessibleDescription(
      "This menu does nothing"); 
    menuBar.add(menu); 

    return menuBar; 
} 

public Container createContentPane() { 
    //Create the content-pane-to-be. 
    JPanel contentPane = new JPanel(new BorderLayout()); 
    contentPane.setOpaque(true); 

    //Create a scrolled text area. 
    output = new JTextArea(5, 30); 
    output.setEditable(false); 
    scrollPane = new JScrollPane(output); 

    //Add the text area to the content pane. 
    contentPane.add(scrollPane, BorderLayout.CENTER); 

    return contentPane; 
} 

public void createPopupMenu() { 
    JMenuItem menuItem; 

    //Create the popup menu. 
    JPopupMenu popup = new JPopupMenu(); 
    menuItem = new JMenuItem("A popup menu item"); 
    menuItem.addActionListener(this); 
    popup.add(menuItem); 
    menuItem = new JMenuItem("Another popup menu item"); 
    menuItem.addActionListener(this); 
    popup.add(menuItem); 

    //Add listener to the text area so the popup menu can come up. 
    MouseListener popupListener = new PopupListener(popup); 
    output.addMouseListener(popupListener); 
} 

public void actionPerformed(ActionEvent e) { 
    JMenuItem source = (JMenuItem)(e.getSource()); 
    String s = "Action event detected." 
       + newline 
       + " Event source: " + source.getText() 
       + " (an instance of " + getClassName(source) + ")"; 
    output.append(s + newline); 
    output.setCaretPosition(output.getDocument().getLength()); 
} 

public void itemStateChanged(ItemEvent e) { 
    JMenuItem source = (JMenuItem)(e.getSource()); 
    String s = "Item event detected." 
       + newline 
       + " Event source: " + source.getText() 
       + " (an instance of " + getClassName(source) + ")" 
       + newline 
       + " New state: " 
       + ((e.getStateChange() == ItemEvent.SELECTED) ? 
       "selected":"unselected"); 
    output.append(s + newline); 
    output.setCaretPosition(output.getDocument().getLength()); 
} 

// Returns just the class name -- no package info. 
protected String getClassName(Object o) { 
    String classString = o.getClass().getName(); 
    int dotIndex = classString.lastIndexOf("."); 
    return classString.substring(dotIndex+1); 
} 

/** Returns an ImageIcon, or null if the path was invalid. */ 
protected static ImageIcon createImageIcon(String path) { 
    java.net.URL imgURL = PopupMenuDemo.class.getResource(path); 
    if (imgURL != null) { 
     return new ImageIcon(imgURL); 
    } else { 
     System.err.println("Couldn't find file: " + path); 
     return null; 
    } 
} 

/** 
* Create the GUI and show it. For thread safety, 
* this method should be invoked from the 
* event-dispatching thread. 
*/ 




private static void createAndShowGUI() { 
    //Create and set up the window. 
    JFrame frame = new JFrame("PopupMenuDemo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Create/set menu bar and content pane. 
    PopupMenuDemo demo = new PopupMenuDemo(); 
    frame.setJMenuBar(demo.createMenuBar()); 
    frame.setContentPane(demo.createContentPane()); 

    //Create and set up the popup menu. 
    demo.createPopupMenu(); 

    //Display the window. 
    frame.setSize(450, 260); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    //Schedule a job for the event-dispatching thread: 
    //creating and showing this application's GUI. 
    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGUI(); 
     } 
    }); 
} 

class PopupListener extends MouseAdapter { 
    JPopupMenu popup; 

    PopupListener(JPopupMenu popupMenu) { 
     popup = popupMenu; 
    } 

    public void mousePressed(MouseEvent e) { 
     maybeShowPopup(e); 
    } 

    public void mouseReleased(MouseEvent e) { 
     maybeShowPopup(e); 
    } 

    private void maybeShowPopup(MouseEvent e) { 
     if (e.isPopupTrigger()) { 
      popup.show(e.getComponent(), 
         e.getX(), e.getY()); 
     } 
    } 
} 

}

Cuestiones relacionadas