/* * 1.1 version. */ import java.awt.*; import java.awt.event.*; public class MenuWindow extends Frame implements ActionListener, ItemListener { boolean inAnApplet = true; TextArea output; PopupMenu popup; String newline; public MenuWindow() { MenuBar mb; Menu m1, m2, m3, m4, m4_1, m5; MenuItem mi1_1, mi1_2, mi3_1, mi3_2, mi3_3, mi3_4, mi4_1_1, mi5_1, mi5_2, pmi1, pmi2, mi5_1_duplicate; CheckboxMenuItem mi2_1; addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if (inAnApplet) { dispose(); } else { System.exit(0); } } }); newline = System.getProperty("line.separator"); //Add regular components to the window. setLayout(new BorderLayout()); //max space: output output = new TextArea(5, 30); output.setEditable(false); add("Center", output); Label label = new Label("Try bringing up" + " a popup menu!"); add("North", label); //Build the menu bar. mb = new MenuBar(); setMenuBar(mb); //Build first menu in the menu bar. //Specifying the second argument as true //makes this a tear-off menu. m1 = new Menu("Menu 1", true); mb.add(m1); mi1_1 = new MenuItem("Menu item 1_1"); m1.add(mi1_1); mi1_2 = new MenuItem("Menu item 1_2"); m1.add(mi1_2); //Build help menu. m5 = new Menu("Help Menu"); mb.setHelpMenu(m5); mi5_1 = new MenuItem("Menu item 5_1"); mi5_1.setShortcut(new MenuShortcut(KeyEvent.VK_5)); m5.add(mi5_1); mi5_2 = new MenuItem("Menu item 5_2"); m5.add(mi5_2); //Make a popup menu. popup = new PopupMenu("A Popup Menu"); add(popup); pmi1 = new MenuItem("A popup menu item"); popup.add(pmi1); mi5_1_duplicate = new MenuItem("Duplicate of menu item 5_1", new MenuShortcut(KeyEvent.VK_5)); popup.add(mi5_1_duplicate); pmi2 = new MenuItem("An item with a shortcut", new MenuShortcut(KeyEvent.VK_6)); popup.add(pmi2); //Build second menu in the menu bar. m2 = new Menu("Menu 2"); mb.add(m2); mi2_1 = new CheckboxMenuItem("Menu item 2_1"); m2.add(mi2_1); //Build third menu in the menu bar. m3 = new Menu("Menu 3"); mb.add(m3); mi3_1 = new MenuItem("Menu item 3_1"); m3.add(mi3_1); mi3_2 = new MenuItem("Menu item 3_2"); m3.add(mi3_2); m3.addSeparator(); mi3_3 = new MenuItem("Menu item 3_3"); m3.add(mi3_3); mi3_4 = new MenuItem("Menu item 3_4"); mi3_4.setEnabled(false); m3.add(mi3_4); //Build fourth menu in the menu bar. m4 = new Menu("Menu 4"); mb.add(m4); m4_1 = new Menu("Submenu 4_1"); m4.add(m4_1); mi4_1_1 = new MenuItem("Menu item 4_1_1"); m4_1.add(mi4_1_1); //Register as an ActionListener for all menu items. m1.addActionListener(this); m2.addActionListener(this); m3.addActionListener(this); m4.addActionListener(this); mi4_1_1.addActionListener(this); //m4 can't detect //submenu actions m5.addActionListener(this); popup.addActionListener(this); //Set action commands for a few menu items. mi1_1.setActionCommand("1_1"); mi1_2.setActionCommand("1_2"); mi5_1.setActionCommand("5_1"); mi5_2.setActionCommand("5_2"); pmi1.setActionCommand("popup item #1"); mi5_1_duplicate.setActionCommand("5_1"); pmi2.setActionCommand("popup item #2"); //Register as ItemListener on checkbox menu item. mi2_1.addItemListener(this); //Listen for when the popup menu should be shown. MouseListener listener = new PopupListener(); addMouseListener(listener); output.addMouseListener(listener); label.addMouseListener(listener); } class PopupListener extends MouseAdapter { 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()); } } } public void actionPerformed(ActionEvent e) { output.append("\"" + e.getActionCommand() + "\" action detected in menu labeled \"" + ((MenuItem)(e.getSource())).getLabel() + "\"." + newline); } public void itemStateChanged(ItemEvent e) { output.append("Item state change detected on item \"" + e.getItem() + "\" (state is " + ((e.getStateChange() == ItemEvent.SELECTED)? "selected)." : "deselected).") + newline); } public static void main(String[] args) { MenuWindow window = new MenuWindow(); window.inAnApplet = false; window.setTitle("MenuWindow Application"); window.setSize(450, 200); window.setVisible(true); } }