?????????
寫得很有條理啊 呵呵
?
??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.JPanel;
?14
import
?javax.swing.JTextArea;
?15
import
?javax.swing.JScrollPane;
?16
import
?javax.swing.JFrame;?
?17
?18
/**/
/*
?PopupMenuDemo.java?requires?images/middle.gif.?
*/
?
?19
?20
/**/
/*
?21
?*?Like?MenuDemo,?but?with?popup?menus?added.
?22
?
*/
?23
public
?
class
?PopupMenuDemo?
implements
?ActionListener,?ItemListener?
{??????
//
負(fù)責(zé)對(duì)點(diǎn)擊事件的監(jiān)聽(tīng)
?24
????JTextArea?output;??????????????????????????????????????????????????????????????????????????????????????
//
負(fù)責(zé)輸出的變量
?25
????JScrollPane?scrollPane;??????????????????????????????????????????????????????????????????????????????
//
創(chuàng)建畫板
?26
????String?newline?
=
?
"
\n
"
;?????????????????????????????????????????????????????????????????????????????????
//
每輸出一次,大回車?
?27
?28
????
public
?JMenuBar?createMenuBar()?
{????????????????????????????????????????????????????????????
//
創(chuàng)建菜單欄JMenuBar?函數(shù)
?29
?????????????????????????????????????????????????????????????????????????
?30
??????????????????????????????????????????????????????????????????????????
//
這里要解釋一下,J*?(如:JMenuBar)是swing提供的
?31
??????????????????????????????????????????????????????????????????????????
//
而,?*?(如:MenuBar)是由awt提供的
?32
????????JMenuBar?menuBar;
?33
????????JMenu?menu,?submenu;
?34
????????JMenuItem?menuItem;
?35
????????JRadioButtonMenuItem?rbMenuItem;
?36
????????JCheckBoxMenuItem?cbMenuItem;?
?37
?38
????????
//
Create?the?menu?bar.???????????????
?39
????????menuBar?
=
?
new
?JMenuBar();??????????????????????????????????????????????????????????????????
//
創(chuàng)建菜單欄JMenuBar?
?40
?41
????????
//
Build?the?first?menu.
?42
????????menu?
=
?
new
?JMenu(
"
A?Menu
"
);?????????????????????????????????????????????????????????????
//
創(chuàng)建第一個(gè)menu
?43
????????menu.setMnemonic(KeyEvent.VK_A);???????????????????????????????????????????????????
//
指定鍵盤助記符的?menu
?44
????????menu.getAccessibleContext().setAccessibleDescription(
?45
????????????????
"
The?only?menu?in?this?program?that?has?menu?items
"
);????????????????????
//
第一個(gè)menu內(nèi)容
?46
????????menuBar.add(menu);??????????????????????????????????????????????????????????????????????????????
//
將menu加入菜單欄?
?47
?48
????????
//
a?group?of?JMenuItems??????????????????????????????????????????????????????????????????????????
//
下同
?49
????????menuItem?
=
?
new
?JMenuItem(
"
A?text-only?menu?item
"
,
?50
?????????????????????????????????KeyEvent.VK_T);
?51
????????
//
menuItem.setMnemonic(KeyEvent.VK_T);?
//
used?constructor?instead
?52
????????menuItem.setAccelerator(KeyStroke.getKeyStroke(
?53
????????????????KeyEvent.VK_1,?ActionEvent.ALT_MASK));
?54
????????menuItem.getAccessibleContext().setAccessibleDescription(
?55
????????????????
"
This?doesn't?really?do?anything
"
);
?56
????????menuItem.addActionListener(
this
);
?57
????????menu.add(menuItem);?
?58
?59
????????ImageIcon?icon?
=
?createImageIcon(
"
images/middle.gif
"
);????????????????????????
//
這里有圖片
?60
????????menuItem?
=
?
new
?JMenuItem(
"
Both?text?and?icon
"
,?icon);
?61
????????menuItem.setMnemonic(KeyEvent.VK_B);
?62
????????menuItem.addActionListener(
this
);
?63
????????menu.add(menuItem);?
?64
?65
????????menuItem?
=
?
new
?JMenuItem(icon);
?66
????????menuItem.setMnemonic(KeyEvent.VK_D);
?67
????????menuItem.addActionListener(
this
);
?68
????????menu.add(menuItem);?
?69
?70
????????
//
a?group?of?radio?button?menu?items
?71
????????menu.addSeparator();?????????????????????????????????????
//
將新分隔符追加到菜單的末尾???????????????????????????????????????????????????????????????????????????????????
?72
????????
?73
????????ButtonGroup?group?
=
?
new
?ButtonGroup();???????????????????
//
創(chuàng)建Button集?
?74
?75
????????rbMenuItem?
=
?
new
?JRadioButtonMenuItem(
"
A?radio?button?menu?item
"
);?????
//
加入單選(1)
?76
????????rbMenuItem.setSelected(
true
);
?77
????????rbMenuItem.setMnemonic(KeyEvent.VK_R);
?78
????????group.add(rbMenuItem);
?79
????????rbMenuItem.addActionListener(
this
);??
//
設(shè)置事件監(jiān)聽(tīng)?????????????????????????????????
?80
????????menu.add(rbMenuItem);?
?81
?82
????????rbMenuItem?
=
?
new
?JRadioButtonMenuItem(
"
Another?one
"
);??????????????????
//
加入單選(2)
?83
????????rbMenuItem.setMnemonic(KeyEvent.VK_O);
?84
????????group.add(rbMenuItem);
?85
????????rbMenuItem.addActionListener(
this
);
?86
????????menu.add(rbMenuItem);?
?87
?88
????????
//
a?group?of?check?box?menu?items
?89
????????menu.addSeparator();??????????????????????????????????????????????????
//
將新分隔符追加到菜單的末尾???
?90
????????cbMenuItem?
=
?
new
?JCheckBoxMenuItem(
"
A?check?box?menu?item
"
);??????????
//
加入復(fù)選(1)
?91
????????cbMenuItem.setMnemonic(KeyEvent.VK_C);
?92
????????cbMenuItem.addItemListener(
this
);
?93
????????menu.add(cbMenuItem);?
?94
?95
????????cbMenuItem?
=
?
new
?JCheckBoxMenuItem(
"
Another?one
"
);?????????????????????
//
加入復(fù)選(2)
?96
????????cbMenuItem.setMnemonic(KeyEvent.VK_H);
?97
????????cbMenuItem.addItemListener(
this
);
?98
????????menu.add(cbMenuItem);?
?99
100
????????
//
a?submenu????????????????????????????????????????????????????????????
//
創(chuàng)建具有子菜單的超級(jí)菜單
101
????????menu.addSeparator();?????????????????????????????
102
????????submenu?
=
?
new
?JMenu(
"
A?submenu
"
);???????????????????????????????????????
//
父menu?(submenu)
103
????????submenu.setMnemonic(KeyEvent.VK_S);?
104
105
????????menuItem?
=
?
new
?JMenuItem(
"
An?item?in?the?submenu
"
);?????????????????????
//
子?menu1?(menuItem)??????????
106
????????menuItem.setAccelerator(KeyStroke.getKeyStroke(
107
????????????????KeyEvent.VK_2,?ActionEvent.ALT_MASK));
108
????????menuItem.addActionListener(
this
);
109
????????submenu.add(menuItem);?
110
111
????????menuItem?
=
?
new
?JMenuItem(
"
Another?item
"
);????????????????????????????????
//
子?menu2?(menuItem)
112
????????menuItem.addActionListener(
this
);
113
????????submenu.add(menuItem);
114
????????menu.add(submenu);?
115
116
????????
//
Build?second?menu?in?the?menu?bar.????????????????????????????????????
//
另一個(gè)菜單
117
????????menu?
=
?
new
?JMenu(
"
Another?Menu
"
);
118
????????menu.setMnemonic(KeyEvent.VK_N);
119
????????menu.getAccessibleContext().setAccessibleDescription(
120
????????????????
"
This?menu?does?nothing
"
);
121
????????menuBar.add(menu);?
122
123
????????
return
?menuBar;
124
????}
?
125
126
????
public
?Container?createContentPane()?
{???????????????????????????????????????
//
創(chuàng)建中間畫板
127
????????
//
Create?the?content-pane-to-be.
128
????????JPanel?contentPane?
=
?
new
?JPanel(
new
?BorderLayout());
129
????????contentPane.setOpaque(
true
);?
130
131
????????
//
Create?a?scrolled?text?area.
132
????????output?
=
?
new
?JTextArea(
5
,?
30
);
133
????????output.setEditable(
false
);
134
????????scrollPane?
=
?
new
?JScrollPane(output);?
135
136
????????
//
Add?the?text?area?to?the?content?pane.
137
????????contentPane.add(scrollPane,?BorderLayout.CENTER);?
138
139
????????
return
?contentPane;
140
????}
?
141
142
????
public
?
void
?createPopupMenu()?
{??????????????????????????????????????????????
//
創(chuàng)建右擊菜單,,不懂請(qǐng)看我的另一篇文章?
143
144
????????JMenuItem?menuItem;?
145
146
????????
//
Create?the?popup?menu.
147
????????JPopupMenu?popup?
=
?
new
?JPopupMenu();
148
????????menuItem?
=
?
new
?JMenuItem(
"
A?popup?menu?item
"
);
149
????????menuItem.addActionListener(
this
);
150
????????popup.add(menuItem);
151
????????menuItem?
=
?
new
?JMenuItem(
"
Another?popup?menu?item
"
);
152
????????menuItem.addActionListener(
this
);
153
????????popup.add(menuItem);?
154
155
????????
//
Add?listener?to?the?text?area?so?the?popup?menu?can?come?up.
156
????????MouseListener?popupListener?
=
?
new
?PopupListener(popup);
157
????????output.addMouseListener(popupListener);
158
????}
?
159
160
????
public
?
void
?actionPerformed(ActionEvent?e)?
{?????????????????????????????????????????????
//
創(chuàng)建菜單監(jiān)聽(tīng)
161
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
//
并做出相應(yīng)的事件
162
????????JMenuItem?source?
=
?(JMenuItem)(e.getSource());
163
????????String?s?
=
?
"
Action?event?detected.
"
164
???????????????????
+
?newline
165
???????????????????
+
?
"
????Event?source:?
"
?
+
?source.getText()
166
???????????????????
+
?
"
?(an?instance?of?
"
?
+
?getClassName(source)?
+
?
"
)
"
;
167
????????output.append(s?
+
?newline);
168
????????output.setCaretPosition(output.getDocument().getLength());
169
????}
?
170
171
????
public
?
void
?itemStateChanged(ItemEvent?e)?
{??????????????????????????????????????????????
//
監(jiān)聽(tīng)多選框
172
????????JMenuItem?source?
=
?(JMenuItem)(e.getSource());
173
????????String?s?
=
?
"
Item?event?detected.
"
174
???????????????????
+
?newline
175
???????????????????
+
?
"
????Event?source:?
"
?
+
?source.getText()
176
???????????????????
+
?
"
?(an?instance?of?
"
?
+
?getClassName(source)?
+
?
"
)
"
177
???????????????????
+
?newline
178
???????????????????
+
?
"
????New?state:?
"
179
???????????????????
+
?((e.getStateChange()?
==
?ItemEvent.SELECTED)?
?
180
?????????????????????
"
selected
"
:
"
unselected
"
);
181
????????output.append(s?
+
?newline);
182
????????output.setCaretPosition(output.getDocument().getLength());
183
????}
?
184
185
????
//
?Returns?just?the?class?name?--?no?package?info.
186
????
protected
?String?getClassName(Object?o)?
{?????????????????????????????????????????????
//
創(chuàng)建函數(shù),獲取所調(diào)用的函數(shù)的名稱
187
????????String?classString?
=
?o.getClass().getName();
188
????????
int
?dotIndex?
=
?classString.lastIndexOf(
"
.
"
);
189
????????
return
?classString.substring(dotIndex
+
1
);
190
????}
?
191
192
????
/**?*/
/**
?Returns?an?ImageIcon,?or?null?if?the?path?was?invalid.?
*/
193
????
protected
?
static
?ImageIcon?createImageIcon(String?path)?
{???????????????????????????
//
調(diào)用前面的gif圖片
194
????????java.net.URL?imgURL?
=
?PopupMenuDemo.
class
.getResource(path);
195
????????
if
?(imgURL?
!=
?
null
)?
{
196
????????????
return
?
new
?ImageIcon(imgURL);
197
????????}
?
else
?
{
198
????????????System.err.println(
"
Couldn't?find?file:?
"
?
+
?path);
199
????????????
return
?
null
;
200
????????}
201
????}
?
202
203
????
/**?*/
/**
204
?????*?Create?the?GUI?and?show?it.??For?thread?safety,
205
?????*?this?method?should?be?invoked?from?the
206
?????*?event-dispatching?thread.
207
?????
*/
208
????
private
?
static
?
void
?createAndShowGUI()?
{??????????????????????????
//
創(chuàng)建所須GUI線程(控件),并進(jìn)行設(shè)置
209
????????
//
Create?and?set?up?the?window.
210
????????JFrame?frame?
=
?
new
?JFrame(
"
PopupMenuDemo
"
);
211
????????frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?
212
213
????????
//
Create/set?menu?bar?and?content?pane.
214
????????PopupMenuDemo?demo?
=
?
new
?PopupMenuDemo();
215
????????frame.setJMenuBar(demo.createMenuBar());
216
????????frame.setContentPane(demo.createContentPane());?
217
218
????????
//
Create?and?set?up?the?popup?menu.
219
????????demo.createPopupMenu();?
220
221
????????
//
Display?the?window.
222
????????frame.setSize(
450
,?
260
);
223
????????frame.setVisible(
true
);
224
????}
?
225
226
????
public
?
static
?
void
?main(String[]?args)?
{??????????????????????????????????
//
主函數(shù)
227
????????
//
Schedule?a?job?for?the?event-dispatching?thread:
228
????????
//
creating?and?showing?this?application's?GUI.
229
????????javax.swing.SwingUtilities.invokeLater(
new
?Runnable()?
{
230
????????????
public
?
void
?run()?
{
231
????????????????createAndShowGUI();
232
????????????}
233
????????}
);
234
????}
?
235
236
????
class
?PopupListener?
extends
?MouseAdapter?
{?????????????????????????????????
//
右擊菜單監(jiān)聽(tīng)
237
????????JPopupMenu?popup;?
238
239
????????PopupListener(JPopupMenu?popupMenu)?
{
240
????????????popup?
=
?popupMenu;
241
????????}
?
242
243
????????
public
?
void
?mousePressed(MouseEvent?e)?
{
244
????????????maybeShowPopup(e);
245
????????}
?
246
247
????????
public
?
void
?mouseReleased(MouseEvent?e)?
{
248
????????????maybeShowPopup(e);
249
????????}
?
250
251
????????
private
?
void
?maybeShowPopup(MouseEvent?e)?
{
252
????????????
if
?(e.isPopupTrigger())?
{
253
????????????????popup.show(e.getComponent(),
254
???????????????????????????e.getX(),?e.getY());
255
????????????}
256
????????}
257
????}
258
259
260
261
}
?
262
地震讓大伙知道:居安思危,才是生存之道。
posted on 2007-02-25 10:29
小尋 閱讀(438)
評(píng)論(2) 編輯 收藏 所屬分類:
j2se/j2ee/j2me