samer@1
|
1 import java.awt.*;
|
samer@1
|
2 import java.awt.event.*;
|
samer@1
|
3 import javax.swing.JMenu;
|
samer@1
|
4 import javax.swing.JMenuItem;
|
samer@1
|
5 import javax.swing.JCheckBoxMenuItem;
|
samer@1
|
6 import javax.swing.JRadioButtonMenuItem;
|
samer@1
|
7 import javax.swing.ButtonGroup;
|
samer@1
|
8 import javax.swing.JMenuBar;
|
samer@1
|
9 import javax.swing.KeyStroke;
|
samer@1
|
10 import javax.swing.ImageIcon;
|
samer@1
|
11
|
samer@1
|
12 import javax.swing.JTextArea;
|
samer@1
|
13 import javax.swing.JScrollPane;
|
samer@1
|
14 import javax.swing.JFrame;
|
samer@1
|
15
|
samer@1
|
16 /*
|
samer@1
|
17 * This class adds event handling to MenuLookDemo.
|
samer@1
|
18 */
|
samer@1
|
19 public class MenuDemo extends JFrame
|
samer@1
|
20 implements ActionListener, ItemListener {
|
samer@1
|
21 JTextArea output;
|
samer@1
|
22 JScrollPane scrollPane;
|
samer@1
|
23 String newline = "\n";
|
samer@1
|
24
|
samer@1
|
25 public MenuDemo() {
|
samer@1
|
26 JMenuBar menuBar;
|
samer@1
|
27 JMenu menu, submenu;
|
samer@1
|
28 JMenuItem menuItem;
|
samer@1
|
29 JRadioButtonMenuItem rbMenuItem;
|
samer@1
|
30 JCheckBoxMenuItem cbMenuItem;
|
samer@1
|
31
|
samer@1
|
32 addWindowListener(new WindowAdapter() {
|
samer@1
|
33 public void windowClosing(WindowEvent e) {
|
samer@1
|
34 System.exit(0);
|
samer@1
|
35 }
|
samer@1
|
36 });
|
samer@1
|
37
|
samer@1
|
38 //Add regular components to the window, using the default BorderLayout.
|
samer@1
|
39 Container contentPane = getContentPane();
|
samer@1
|
40 output = new JTextArea(5, 30);
|
samer@1
|
41 output.setEditable(false);
|
samer@1
|
42 scrollPane = new JScrollPane(output);
|
samer@1
|
43 contentPane.add(scrollPane, BorderLayout.CENTER);
|
samer@1
|
44
|
samer@1
|
45 //Create the menu bar.
|
samer@1
|
46 menuBar = new JMenuBar();
|
samer@1
|
47 setJMenuBar(menuBar);
|
samer@1
|
48
|
samer@1
|
49 //Build the first menu.
|
samer@1
|
50 menu = new JMenu("A Menu");
|
samer@1
|
51 menu.setMnemonic(KeyEvent.VK_A);
|
samer@1
|
52 menu.getAccessibleContext().setAccessibleDescription(
|
samer@1
|
53 "The only menu in this program that has menu items");
|
samer@1
|
54 menuBar.add(menu);
|
samer@1
|
55
|
samer@1
|
56 //a group of JMenuItems
|
samer@1
|
57 menuItem = new JMenuItem("A text-only menu item",
|
samer@1
|
58 KeyEvent.VK_T);
|
samer@1
|
59 //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
|
samer@1
|
60 menuItem.setAccelerator(KeyStroke.getKeyStroke(
|
samer@1
|
61 KeyEvent.VK_1, ActionEvent.ALT_MASK));
|
samer@1
|
62 menuItem.getAccessibleContext().setAccessibleDescription(
|
samer@1
|
63 "This doesn't really do anything");
|
samer@1
|
64 menuItem.addActionListener(this);
|
samer@1
|
65 menu.add(menuItem);
|
samer@1
|
66
|
samer@1
|
67 menuItem = new JMenuItem("Both text and icon",
|
samer@1
|
68 new ImageIcon("images/middle.gif"));
|
samer@1
|
69 menuItem.setMnemonic(KeyEvent.VK_B);
|
samer@1
|
70 menuItem.addActionListener(this);
|
samer@1
|
71 menu.add(menuItem);
|
samer@1
|
72
|
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
|
samer@1
|
128 public void actionPerformed(ActionEvent e) {
|
samer@1
|
129 JMenuItem source = (JMenuItem)(e.getSource());
|
samer@1
|
130 String s = "Action event detected."
|
samer@1
|
131 + newline
|
samer@1
|
132 + " Event source: " + source.getText()
|
samer@1
|
133 + " (an instance of " + getClassName(source) + ")";
|
samer@1
|
134 output.append(s + newline);
|
samer@1
|
135 }
|
samer@1
|
136
|
samer@1
|
137 public void itemStateChanged(ItemEvent e) {
|
samer@1
|
138 JMenuItem source = (JMenuItem)(e.getSource());
|
samer@1
|
139 String s = "Item event detected."
|
samer@1
|
140 + newline
|
samer@1
|
141 + " Event source: " + source.getText()
|
samer@1
|
142 + " (an instance of " + getClassName(source) + ")"
|
samer@1
|
143 + newline
|
samer@1
|
144 + " New state: "
|
samer@1
|
145 + ((e.getStateChange() == ItemEvent.SELECTED) ?
|
samer@1
|
146 "selected":"unselected");
|
samer@1
|
147 output.append(s + newline);
|
samer@1
|
148 }
|
samer@1
|
149
|
samer@1
|
150 // Returns just the class name -- no package info.
|
samer@1
|
151 protected String getClassName(Object o) {
|
samer@1
|
152 String classString = o.getClass().getName();
|
samer@1
|
153 int dotIndex = classString.lastIndexOf(".");
|
samer@1
|
154 return classString.substring(dotIndex+1);
|
samer@1
|
155 }
|
samer@1
|
156
|
samer@1
|
157 public static void main(String[] args) {
|
samer@1
|
158 MenuDemo window = new MenuDemo();
|
samer@1
|
159
|
samer@1
|
160 window.setTitle("MenuDemo");
|
samer@1
|
161 window.setSize(450, 260);
|
samer@1
|
162 window.setVisible(true);
|
samer@1
|
163 }
|
samer@1
|
164 }
|