![]() ![]() ![]() | Lecture 12 - slide 21 : 30 |
/*
* 1.1 version. From The Java Tutorial.
*/
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() {
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);
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;
//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);
// end menu 1
//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);
}
}