annotate examples/gui/swing/PopupMenuDemo.java @ 1:5df24c91468d

Oh my what a mess.
author samer
date Fri, 05 Apr 2019 16:26:00 +0100
parents
children
rev   line source
samer@1 1 import java.awt.*;
samer@1 2 import java.awt.event.*;
samer@1 3 import javax.swing.JPopupMenu;
samer@1 4 import javax.swing.JMenu;
samer@1 5 import javax.swing.JMenuItem;
samer@1 6 import javax.swing.JCheckBoxMenuItem;
samer@1 7 import javax.swing.JRadioButtonMenuItem;
samer@1 8 import javax.swing.ButtonGroup;
samer@1 9 import javax.swing.JMenuBar;
samer@1 10 import javax.swing.KeyStroke;
samer@1 11 import javax.swing.ImageIcon;
samer@1 12
samer@1 13 import javax.swing.JTextArea;
samer@1 14 import javax.swing.JScrollPane;
samer@1 15 import javax.swing.JFrame;
samer@1 16
samer@1 17 /*
samer@1 18 * This class adds popup menus to MenuDemo.
samer@1 19 */
samer@1 20 public class PopupMenuDemo extends JFrame
samer@1 21 implements ActionListener, ItemListener {
samer@1 22 JTextArea output;
samer@1 23 JScrollPane scrollPane;
samer@1 24 String newline = "\n";
samer@1 25 JPopupMenu popup;
samer@1 26
samer@1 27 public PopupMenuDemo() {
samer@1 28 JMenuBar menuBar;
samer@1 29 JMenu menu, submenu;
samer@1 30 JMenuItem menuItem;
samer@1 31 JRadioButtonMenuItem rbMenuItem;
samer@1 32 JCheckBoxMenuItem cbMenuItem;
samer@1 33
samer@1 34 addWindowListener(new WindowAdapter() {
samer@1 35 public void windowClosing(WindowEvent e) {
samer@1 36 System.exit(0);
samer@1 37 }
samer@1 38 });
samer@1 39
samer@1 40 //Add regular components to the window, using the default BorderLayout.
samer@1 41 Container contentPane = getContentPane();
samer@1 42 output = new JTextArea(5, 30);
samer@1 43 output.setEditable(false);
samer@1 44 scrollPane = new JScrollPane(output);
samer@1 45 contentPane.add(scrollPane, BorderLayout.CENTER);
samer@1 46
samer@1 47 //Create the menu bar.
samer@1 48 menuBar = new JMenuBar();
samer@1 49 setJMenuBar(menuBar);
samer@1 50
samer@1 51 //Build the first menu.
samer@1 52 menu = new JMenu("A Menu");
samer@1 53 menu.setMnemonic(KeyEvent.VK_A);
samer@1 54 menu.getAccessibleContext().setAccessibleDescription(
samer@1 55 "The only menu in this program that has menu items");
samer@1 56 menuBar.add(menu);
samer@1 57
samer@1 58 //a group of JMenuItems
samer@1 59 menuItem = new JMenuItem("A text-only menu item",
samer@1 60 KeyEvent.VK_T);
samer@1 61 //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
samer@1 62 menuItem.setAccelerator(KeyStroke.getKeyStroke(
samer@1 63 KeyEvent.VK_1, ActionEvent.ALT_MASK));
samer@1 64 menuItem.getAccessibleContext().setAccessibleDescription(
samer@1 65 "This doesn't really do anything");
samer@1 66 menuItem.addActionListener(this);
samer@1 67 menu.add(menuItem);
samer@1 68 menuItem = new JMenuItem("Both text and icon",
samer@1 69 new ImageIcon("images/middle.gif"));
samer@1 70 menuItem.setMnemonic(KeyEvent.VK_B);
samer@1 71 menuItem.addActionListener(this);
samer@1 72 menu.add(menuItem);
samer@1 73 menuItem = new JMenuItem(new ImageIcon("images/middle.gif"));
samer@1 74 menuItem.setMnemonic(KeyEvent.VK_D);
samer@1 75 menuItem.addActionListener(this);
samer@1 76 menu.add(menuItem);
samer@1 77
samer@1 78 //a group of radio button menu items
samer@1 79 menu.addSeparator();
samer@1 80 ButtonGroup group = new ButtonGroup();
samer@1 81 rbMenuItem = new JRadioButtonMenuItem("A radio button menu item");
samer@1 82 rbMenuItem.setSelected(true);
samer@1 83 rbMenuItem.setMnemonic(KeyEvent.VK_R);
samer@1 84 group.add(rbMenuItem);
samer@1 85 rbMenuItem.addActionListener(this);
samer@1 86 menu.add(rbMenuItem);
samer@1 87 rbMenuItem = new JRadioButtonMenuItem("Another one");
samer@1 88 rbMenuItem.setMnemonic(KeyEvent.VK_O);
samer@1 89 group.add(rbMenuItem);
samer@1 90 rbMenuItem.addActionListener(this);
samer@1 91 menu.add(rbMenuItem);
samer@1 92
samer@1 93 //a group of check box menu items
samer@1 94 menu.addSeparator();
samer@1 95 cbMenuItem = new JCheckBoxMenuItem("A check box menu item");
samer@1 96 cbMenuItem.setMnemonic(KeyEvent.VK_C);
samer@1 97 cbMenuItem.addItemListener(this);
samer@1 98 menu.add(cbMenuItem);
samer@1 99 cbMenuItem = new JCheckBoxMenuItem("Another one");
samer@1 100 cbMenuItem.setMnemonic(KeyEvent.VK_H);
samer@1 101 cbMenuItem.addItemListener(this);
samer@1 102 menu.add(cbMenuItem);
samer@1 103
samer@1 104 //a submenu
samer@1 105 menu.addSeparator();
samer@1 106 submenu = new JMenu("A submenu");
samer@1 107 submenu.setMnemonic(KeyEvent.VK_S);
samer@1 108
samer@1 109 menuItem = new JMenuItem("An item in the submenu");
samer@1 110 menuItem.setAccelerator(KeyStroke.getKeyStroke(
samer@1 111 KeyEvent.VK_2, ActionEvent.ALT_MASK));
samer@1 112 menuItem.addActionListener(this);
samer@1 113 submenu.add(menuItem);
samer@1 114
samer@1 115 menuItem = new JMenuItem("Another item");
samer@1 116 menuItem.addActionListener(this);
samer@1 117 submenu.add(menuItem);
samer@1 118 menu.add(submenu);
samer@1 119
samer@1 120 //Build second menu in the menu bar.
samer@1 121 menu = new JMenu("Another Menu");
samer@1 122 menu.setMnemonic(KeyEvent.VK_N);
samer@1 123 menu.getAccessibleContext().setAccessibleDescription(
samer@1 124 "This menu does nothing");
samer@1 125 menuBar.add(menu);
samer@1 126
samer@1 127 //Create the popup menu.
samer@1 128 popup = new JPopupMenu();
samer@1 129 menuItem = new JMenuItem("A popup menu item");
samer@1 130 menuItem.addActionListener(this);
samer@1 131 popup.add(menuItem);
samer@1 132 menuItem = new JMenuItem("Another popup menu item");
samer@1 133 menuItem.addActionListener(this);
samer@1 134 popup.add(menuItem);
samer@1 135
samer@1 136 //Add listener to components that can bring up popup menus.
samer@1 137 MouseListener popupListener = new PopupListener();
samer@1 138 output.addMouseListener(popupListener);
samer@1 139 scrollPane.addMouseListener(popupListener);
samer@1 140 menuBar.addMouseListener(popupListener);
samer@1 141 }
samer@1 142
samer@1 143 public void actionPerformed(ActionEvent e) {
samer@1 144 JMenuItem source = (JMenuItem)(e.getSource());
samer@1 145 String s = "Action event detected."
samer@1 146 + newline
samer@1 147 + " Event source: " + source.getText()
samer@1 148 + " (an instance of " + getClassName(source) + ")";
samer@1 149 output.append(s + newline);
samer@1 150 }
samer@1 151
samer@1 152 public void itemStateChanged(ItemEvent e) {
samer@1 153 JMenuItem source = (JMenuItem)(e.getSource());
samer@1 154 String s = "Item event detected."
samer@1 155 + newline
samer@1 156 + " Event source: " + source.getText()
samer@1 157 + " (an instance of " + getClassName(source) + ")"
samer@1 158 + newline
samer@1 159 + " New state: "
samer@1 160 + ((e.getStateChange() == ItemEvent.SELECTED) ?
samer@1 161 "selected":"unselected");
samer@1 162 output.append(s + newline);
samer@1 163 }
samer@1 164
samer@1 165 // Returns just the class name -- no package info.
samer@1 166 protected String getClassName(Object o) {
samer@1 167 String classString = o.getClass().getName();
samer@1 168 int dotIndex = classString.lastIndexOf(".");
samer@1 169 return classString.substring(dotIndex+1);
samer@1 170 }
samer@1 171
samer@1 172 public static void main(String[] args) {
samer@1 173 PopupMenuDemo window = new PopupMenuDemo();
samer@1 174
samer@1 175 window.setTitle("PopupMenuDemo");
samer@1 176 window.setSize(450, 260);
samer@1 177 window.setVisible(true);
samer@1 178 }
samer@1 179
samer@1 180 class PopupListener extends MouseAdapter {
samer@1 181 public void mousePressed(MouseEvent e) {
samer@1 182 maybeShowPopup(e);
samer@1 183 }
samer@1 184
samer@1 185 public void mouseReleased(MouseEvent e) {
samer@1 186 maybeShowPopup(e);
samer@1 187 }
samer@1 188
samer@1 189 private void maybeShowPopup(MouseEvent e) {
samer@1 190 if (e.isPopupTrigger()) {
samer@1 191 popup.show(e.getComponent(),
samer@1 192 e.getX(), e.getY());
samer@1 193 }
samer@1 194 }
samer@1 195 }
samer@1 196 }