java menuitem 图标_Java基础之处理事件——添加菜单图标(Sketcher 8 with toolbar buttons and menu icons)...

本文档展示了如何在Java Swing中创建Sketcher应用程序,并详细解释了如何为菜单项添加图标,包括文件菜单(如新建、打开、保存等)、元素类型菜单(如线条、矩形、圆形等)和颜色菜单(如红色、黄色、绿色和蓝色)。通过Action类扩展创建自定义菜单动作,并使用LARGE_ICON_KEY和SMALL_ICON键值设置菜单图标和工具栏按钮图标。
摘要由CSDN通过智能技术生成

1 //Frame for the Sketcher application

2 import javax.swing.*;3 import javax.swing.border.*;4 import java.awt.event.*;5 import java.awt.*;6

7 import static java.awt.event.InputEvent.*;8 import static java.awt.AWTEvent.*;9 import static java.awt.Color.*;10 import static Constants.SketcherConstants.*;11 import static javax.swing.Action.*;12

13 @SuppressWarnings("serial")14 public class SketcherFrame extendsJFrame {15 //Constructor

16 publicSketcherFrame(String title) {17 setTitle(title); //Set the window title

18 setJMenuBar(menuBar); //Add the menu bar to the window

19 setDefaultCloseOperation(EXIT_ON_CLOSE); //Default is exit the application

20

21 createFileMenu(); //Create the File menu

22 createElementMenu(); //Create the element menu

23 createColorMenu(); //Create the element menu

24 createToolbar();25 toolBar.setRollover(true);26 getContentPane().add(toolBar, BorderLayout.NORTH);27 }28

29 //Create File menu item actions

30 private voidcreateFileMenuActions() {31 newAction = new FileAction("New", 'N', CTRL_DOWN_MASK);32 openAction = new FileAction("Open", 'O', CTRL_DOWN_MASK);33 closeAction = new FileAction("Close");34 saveAction = new FileAction("Save", 'S', CTRL_DOWN_MASK);35 saveAsAction = new FileAction("Save As...");36 printAction = new FileAction("Print", 'P', CTRL_DOWN_MASK);37 exitAction = new FileAction("Exit", 'X', CTRL_DOWN_MASK);38

39 //Initialize the array

40 FileAction[] actions ={openAction, closeAction, saveAction, saveAsAction, printAction, exitAction};41 fileActions =actions;42

43 //Add toolbar icons

44 newAction.putValue(LARGE_ICON_KEY, NEW24);45 openAction.putValue(LARGE_ICON_KEY, OPEN24);46 saveAction.putValue(LARGE_ICON_KEY, SAVE24);47 saveAsAction.putValue(LARGE_ICON_KEY, SAVEAS24);48 printAction.putValue(LARGE_ICON_KEY, PRINT24);49

50 //Add menu item icons

51 newAction.putValue(SMALL_ICON, NEW16);52 openAction.putValue(SMALL_ICON, OPEN16);53 saveAction.putValue(SMALL_ICON, SAVE16);54 saveAsAction.putValue(SMALL_ICON,SAVEAS16);55 printAction.putValue(SMALL_ICON, PRINT16);56 }57

58 //Create the File menu

59 private voidcreateFileMenu() {60 JMenu fileMenu = new JMenu("File"); //Create File menu

61 fileMenu.setMnemonic('F'); //Create shortcut

62 createFileMenuActions(); //Create Actions for File menu item63

64 //Construct the file drop-down menu

65 fileMenu.add(newAction); //New Sketch menu item

66 fileMenu.add(openAction); //Open sketch menu item

67 fileMenu.add(closeAction); //Close sketch menu item

68 fileMenu.addSeparator(); //Add separator

69 fileMenu.add(saveAction); //Save sketch to file

70 fileMenu.add(saveAsAction); //Save As menu item

71 fileMenu.addSeparator(); //Add separator

72 fileMenu.add(printAction); //Print sketch menu item

73 fileMenu.addSeparator(); //Add separator

74 fileMenu.add(exitAction); //Print sketch menu item

75 menuBar.add(fileMenu); //Add the file menu

76 }77

78 //Create Element menu actions

79 private voidcreateElementTypeActions() {80 lineAction = new TypeAction("Line", LINE, 'L', CTRL_DOWN_MASK);81 rectangleAction = new TypeAction("Rectangle", RECTANGLE, 'R', CTRL_DOWN_MASK);82 circleAction = new TypeAction("Circle", CIRCLE,'C', CTRL_DOWN_MASK);83 curveAction = new TypeAction("Curve", CURVE,'U', CTRL_DOWN_MASK);84

85 //Initialize the array

86 TypeAction[] actions ={lineAction, rectangleAction, circleAction, curveAction};87 typeActions =actions;88

89 //Add toolbar icons

90 lineAction.putValue(LARGE_ICON_KEY, LINE24);91 rectangleAction.putValue(LARGE_ICON_KEY, RECTANGLE24);92 circleAction.putValue(LARGE_ICON_KEY, CIRCLE24);93 curveAction.putValue(LARGE_ICON_KEY, CURVE24);94

95 //Add menu item icons

96 lineAction.putValue(SMALL_ICON, LINE16);97 rectangleAction.putValue(SMALL_ICON, RECTANGLE16);98 circleAction.putValue(SMALL_ICON, CIRCLE16);99 curveAction.putValue(SMALL_ICON, CURVE16);100 }101

102 //Create the Elements menu

103 private voidcreateElementMenu() {104 createElementTypeActions();105 elementMenu = new JMenu("Elements"); //Create Elements menu

106 elementMenu.setMnemonic('E'); //Create shortcut

107 createRadioButtonDropDown(elementMenu, typeActions, lineAction);108 menuBar.add(elementMenu); //Add the element menu

109 }110

111 //Create Color menu actions

112 private voidcreateElementColorActions() {113 redAction = new ColorAction("Red", RED, 'R', CTRL_DOWN_MASK|ALT_DOWN_MASK);114 yellowAction = new ColorAction("Yellow", YELLOW, 'Y', CTRL_DOWN_MASK|ALT_DOWN_MASK);115 greenAction = new ColorAction("Green", GREEN, 'G', CTRL_DOWN_MASK|ALT_DOWN_MASK);116 blueAction = new ColorAction("Blue", BLUE, 'B', CTRL_DOWN_MASK|ALT_DOWN_MASK);117

118 //Initialize the array

119 ColorAction[] actions ={redAction, greenAction, blueAction, yellowAction};120 colorActions =actions;121

122 //Add toolbar icons

123 redAction.putValue(LARGE_ICON_KEY, RED24);124 greenAction.putValue(LARGE_ICON_KEY, GREEN24);125 blueAction.putValue(LARGE_ICON_KEY, BLUE24);126 yellowAction.putValue(LARGE_ICON_KEY, YELLOW24);127

128 //Add menu item icons

129 redAction.putValue(SMALL_ICON, RED16);130 greenAction.putValue(SMALL_ICON, GREEN16);131 blueAction.putValue(SMALL_ICON, BLUE16);132 yellowAction.putValue(SMALL_ICON, YELLOW16);133 }134

135 //Create the Color menu

136 private voidcreateColorMenu() {137 createElementColorActions();138 colorMenu = new JMenu("Color"); //Create Elements menu

139 colorMenu.setMnemonic('C'); //Create shortcut

140 createRadioButtonDropDown(colorMenu, colorActions, blueAction);141 menuBar.add(colorMenu); //Add the color menu

142 }143

144 //Menu creation helper

145 private voidcreateRadioButtonDropDown(JMenu menu, Action[] actions, Action selected) {146 ButtonGroup group = newButtonGroup();147 JRadioButtonMenuItem item = null;148 for(Action action : actions) {149 group.add(menu.add(item = newJRadioButtonMenuItem(action)));150 if(action ==selected) {151 item.setSelected(true); //This is default selected

152 }153 }154 }155

156 //Create toolbar buttons on the toolbar

157 private voidcreateToolbar() {158 for(FileAction action: fileActions){159 if(action != exitAction && action !=closeAction)160 addToolbarButton(action); //Add the toolbar button

161 }162 toolBar.addSeparator();163

164 //Create Color menu buttons

165 for(ColorAction action:colorActions){166 addToolbarButton(action); //Add the toolbar button

167 }168 toolBar.addSeparator();169

170 //Create Elements menu buttons

171 for(TypeAction action:typeActions){172 addToolbarButton(action); //Add the toolbar button

173 }174 }175

176 //Create and add a toolbar button

177 private voidaddToolbarButton(Action action) {178 JButton button = new JButton(action); //Create from Action

179 button.setBorder(BorderFactory.createCompoundBorder( //Add button border

180 new EmptyBorder(2,5,5,2), //Outside border

181 BorderFactory.createRaisedBevelBorder())); //Inside border

182 button.setHideActionText(true); //No label on the button

183 toolBar.add(button); //Add the toolbar button

184 }185

186 //Set radio button menu checks

187 private voidsetChecks(JMenu menu, Object eventSource) {188 if(eventSource instanceofJButton){189 JButton button =(JButton)eventSource;190 Action action =button.getAction();191 for(int i = 0 ; i < menu.getItemCount() ; ++i) {192 JMenuItem item =menu.getItem(i);193 item.setSelected(item.getAction() ==action);194 }195 }196 }197

198 //Inner class defining Action objects for File menu items

199 class FileAction extendsAbstractAction {200 //Create action with a name

201 FileAction(String name) {202 super(name);203 }204

205 //Create action with a name and accelerator

206 FileAction(String name, char ch, intmodifiers) {207 super(name);208 putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));209

210 //Now find the character to underline

211 int index =name.toUpperCase().indexOf(ch);212 if(index != -1) {213 putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);214 }215 }216

217 //Event handler

218 public voidactionPerformed(ActionEvent e) {219 //You will add action code here eventually...

220 }221 }222

223 //Inner class defining Action objects for Element type menu items

224 class TypeAction extendsAbstractAction {225 //Create action with just a name property

226 TypeAction(String name, inttypeID) {227 super(name);228 this.typeID =typeID;229 }230

231 //Create action with a name and an accelerator

232 private TypeAction(String name,int typeID, char ch, intmodifiers) {233 this(name, typeID);234 putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));235

236 //Now find the character to underline

237 int index =name.toUpperCase().indexOf(ch);238 if(index != -1) {239 putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);240 }241 }242

243 public voidactionPerformed(ActionEvent e) {244 elementType =typeID;245 setChecks(elementMenu, e.getSource());246 }247

248 private inttypeID;249 }250

251 //Handles color menu items

252 class ColorAction extendsAbstractAction {253 //Create an action with a name and a color

254 publicColorAction(String name, Color color) {255 super(name);256 this.color =color;257 }258

259 //Create an action with a name, a color, and an accelerator

260 public ColorAction(String name, Color color, char ch, intmodifiers) {261 this(name, color);262 putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));263

264 //Now find the character to underline

265 int index =name.toUpperCase().indexOf(ch);266 if(index != -1) {267 putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);268 }269 }270

271 public voidactionPerformed(ActionEvent e) {272 elementColor =color;273 setChecks(colorMenu, e.getSource());274 }275

276 privateColor color;277 }278

279 //File actions

280 privateFileAction newAction, openAction, closeAction, saveAction, saveAsAction, printAction, exitAction;281 private FileAction[] fileActions; //File actions as an array282

283 //Element type actions

284 privateTypeAction lineAction, rectangleAction, circleAction, curveAction;285 private TypeAction[] typeActions; //Type actions as an array286

287 //Element color actions

288 privateColorAction redAction, yellowAction,greenAction, blueAction;289 private ColorAction[] colorActions; //Color actions as an array

290

291 private JMenuBar menuBar = new JMenuBar(); //Window menu bar

292 private JMenu elementMenu; //Elements menu

293 private JMenu colorMenu; //Color menu

294

295 private Color elementColor = DEFAULT_ELEMENT_COLOR; //Current element color

296 private int elementType = DEFAULT_ELEMENT_TYPE; //Current element type

297 private JToolBar toolBar = new JToolBar(); //Window toolbar

298 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值