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