Swing JFC Java

//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));
  }
}