Java tutorial
//From: mg@dsd.camb.inmet.com (Mitch Gart) import java.awt.BorderLayout; import java.awt.Button; import java.awt.Component; import java.awt.Frame; import java.awt.Label; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.Panel; import java.awt.PopupMenu; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Hashtable; public class PopupDemo extends Frame implements ActionListener, MouseListener { public static void main(String argv[]) { new PopupDemo().setVisible(true); } public PopupDemo() { MenuBar mb = new MenuBar(); setMenuBar(mb); Menu m = new Menu("file"); mb.add(m); MenuItem item = new MenuItem("file-1"); item.addActionListener(this); m.add(item); item = new MenuItem("file-2"); m.add(item); setSize(100, 100); setLayout(new BorderLayout()); Label l = new Label("label"); addPopup(l, "label"); add(l, "North"); Panel p = new Panel(); addPopup(p, "Panel"); add(p, "Center"); Button b = new Button("button"); addPopup(b, "button"); add(b, "South"); } public void actionPerformed(ActionEvent e) { System.out.println("actionPerformed, event=" + e + ", mod=" + getMods(e)); System.out.println(" command=" + e.getActionCommand()); System.out.println(" param=" + e.paramString()); System.out.println(" source=" + e.getSource()); } String getMods(ActionEvent e) { return getMods(e.getModifiers()); } String getMods(MouseEvent e) { return getMods(e.getModifiers()); } // a convenience routine for printing the Modifier keys String getMods(int mods) { String modstr = ""; if ((mods & ActionEvent.SHIFT_MASK) == ActionEvent.SHIFT_MASK) modstr += (" SHIFT"); if ((mods & ActionEvent.ALT_MASK) == ActionEvent.ALT_MASK) modstr += (" ALT"); if ((mods & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK) modstr += (" CTRL"); if ((mods & ActionEvent.META_MASK) == ActionEvent.META_MASK) modstr += (" META"); return modstr; } public void mouseClicked(MouseEvent e) { mouseAction("mouseClicked", e); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { mouseAction("mousePressed", e); } public void mouseReleased(MouseEvent e) { mouseAction("mouseReleased", e); } void mouseAction(String which, MouseEvent e) { Component c = e.getComponent(); System.out.println(which + "e=" + e + ", mods=" + getMods(e) + ", component=" + c); if (e.isPopupTrigger()) { System.out.println("isPopup"); PopupMenu pm = getHash(c); pm.show(c, c.getSize().width / 2, c.getSize().height / 2); } } void addPopup(Component c, String name) { PopupMenu pm = new PopupMenu(); MenuItem mi = new MenuItem(name + "-1"); mi.addActionListener(this); pm.add(mi); mi = new MenuItem(name + "-2"); pm.add(mi); setHash(c, pm); c.add(pm); c.addMouseListener(this); } Hashtable popupTable = new Hashtable(); void setHash(Component c, PopupMenu p) { popupTable.put(c, p); } PopupMenu getHash(Component c) { return (PopupMenu) (popupTable.get(c)); } }