Mega Code Archive

 
Categories / Java / Swing JFC
 

An example of the JPopupMenu in action

/* Java Swing, 2nd Edition By Marc Loy, Robert Eckstein, Dave Wood, James Elliott, Brian Cole ISBN: 0-596-00408-7 Publisher: O'Reilly  */ // MenuElementExample.java // An example of the JPopupMenu in action. // import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSeparator; import javax.swing.JSlider; import javax.swing.MenuElement; import javax.swing.MenuSelectionManager; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; public class MenuElementExample extends JPanel {   public JPopupMenu popup;   SliderMenuItem slider;   int theValue = 0;   public MenuElementExample() {     popup = new JPopupMenu();     slider = new SliderMenuItem();     popup.add(slider);     popup.add(new JSeparator());     JMenuItem ticks = new JCheckBoxMenuItem("Slider Tick Marks");     ticks.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent event) {         slider.setPaintTicks(!slider.getPaintTicks());       }     });     JMenuItem labels = new JCheckBoxMenuItem("Slider Labels");     labels.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent event) {         slider.setPaintLabels(!slider.getPaintLabels());       }     });     popup.add(ticks);     popup.add(labels);     popup.addPopupMenuListener(new PopupPrintListener());     addMouseListener(new MousePopupListener());   }   // Inner class to check whether mouse events are the popup trigger   class MousePopupListener extends MouseAdapter {     public void mousePressed(MouseEvent e) {       checkPopup(e);     }     public void mouseClicked(MouseEvent e) {       checkPopup(e);     }     public void mouseReleased(MouseEvent e) {       checkPopup(e);     }     private void checkPopup(MouseEvent e) {       if (e.isPopupTrigger()) {         popup.show(MenuElementExample.this, e.getX(), e.getY());       }     }   }   // Inner class to print information in response to popup events   class PopupPrintListener implements PopupMenuListener {     public void popupMenuWillBecomeVisible(PopupMenuEvent e) {     }     public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {       theValue = slider.getValue();       System.out.println("The value is now " + theValue);     }     public void popupMenuCanceled(PopupMenuEvent e) {       System.out.println("Popup menu is hidden!");     }   }   public static void main(String s[]) {     JFrame frame = new JFrame("Menu Element Example");     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setContentPane(new MenuElementExample());     frame.setSize(300, 300);     frame.setVisible(true);   }   // Inner class that defines our special slider menu item   class SliderMenuItem extends JSlider implements MenuElement {     public SliderMenuItem() {       setBorder(new CompoundBorder(new TitledBorder("Control"),           new EmptyBorder(10, 10, 10, 10)));       setMajorTickSpacing(20);       setMinorTickSpacing(10);     }     public void processMouseEvent(MouseEvent e, MenuElement path[],         MenuSelectionManager manager) {     }     public void processKeyEvent(KeyEvent e, MenuElement path[],         MenuSelectionManager manager) {     }     public void menuSelectionChanged(boolean isIncluded) {     }     public MenuElement[] getSubElements() {       return new MenuElement[0];     }     public Component getComponent() {       return this;     }   } }