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 }
|