Mercurial > hg > jslab
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 } |