import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

        // Illustrate a JPopupMenu.
class SwingMenuFrame2 extends JFrame {
    public SwingMenuFrame2() {
        final int width = 200, height = 150;
        setSize(width,height);
        Container contents = getContentPane();

        setupPopupMenu();
        setupPopupListener();
    }

        // Create the popup menu's contents.
    protected void setupPopupMenu(){
        JPopupMenu menu = getPopup();
        JMenuItem order = new JMenuItem("Order now");
        JMenuItem cancelOrder = new JMenuItem("Cancel order");
        // Listeners may be attached to the popup menu items
        // in the normal way.
        // ...
        // Quit option.
        Action quit = new AbstractAction("Quit"){
            public void actionPerformed(ActionEvent e){
                System.exit(0);
            }
        };
        menu.add(order);
        menu.add(cancelOrder);
        menu.addSeparator();
        menu.add(quit);
    }

        // Listen for mouse events that could be the menu trigger.
    protected void setupPopupListener(){
        // Listen for a popup trigger.
        addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                checkForPopup(e);
            }

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

            public void mouseClicked(MouseEvent e){
                checkForPopup(e);
            }

            protected void checkForPopup(MouseEvent e){
                if(e.isPopupTrigger()){
                    final Point p = e.getPoint();
                    // Show the popup within the frame.
                    getPopup().show(SwingMenuFrame2.this,p.x,p.y);
                }
            }
        });
    }

    protected JPopupMenu getPopup(){
        return popup;
    }

    // The menu to be fleshed out.
    private final JPopupMenu popup = new JPopupMenu();
}
