java tooltips_Java基础之处理事件——添加工具提示(Sketcher 9 with tooltips)

夹谷浩宕
2023-12-01

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.Color.*;9 import static Constants.SketcherConstants.*;10 import static javax.swing.Action.*;11

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

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

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

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

19

20 createFileMenu(); //Create the File menu

21 createElementMenu(); //Create the element menu

22 createColorMenu(); //Create the element menu

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

28 //Create File menu item actions

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

38 //Initialize the array

39 FileAction[] actions ={openAction, closeAction, saveAction, saveAsAction, printAction, exitAction};40 fileActions =actions;41 //Add toolbar icons

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

48 //Add menu item icons

49 newAction.putValue(SMALL_ICON, NEW16);50 openAction.putValue(SMALL_ICON, OPEN16);51 saveAction.putValue(SMALL_ICON, SAVE16);52 saveAsAction.putValue(SMALL_ICON,SAVEAS16);53 printAction.putValue(SMALL_ICON, PRINT16);54

55 //Add tooltip text

56 newAction.putValue(SHORT_DESCRIPTION, "Create a new sketch");57 openAction.putValue(SHORT_DESCRIPTION, "Read a sketch from a file");58 closeAction.putValue(SHORT_DESCRIPTION, "Close the current sketch");59 saveAction.putValue(SHORT_DESCRIPTION, "Save the current sketch to file");60 saveAsAction.putValue(SHORT_DESCRIPTION, "Save the current sketch to a new file");61 printAction.putValue(SHORT_DESCRIPTION, "Print the current sketch");62 exitAction.putValue(SHORT_DESCRIPTION, "Exit Sketcher");63 }64

65 //Create the File menu

66 private voidcreateFileMenu() {67 JMenu fileMenu = new JMenu("File"); //Create File menu

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

69 createFileMenuActions(); //Create Actions for File menu item70

71 //Construct the file drop-down menu

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

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

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

75 fileMenu.addSeparator(); //Add separator

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

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

78 fileMenu.addSeparator(); //Add separator

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

80 fileMenu.addSeparator(); //Add separator

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

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

83 }84

85 //Create Element menu actions

86 private voidcreateElementTypeActions() {87 lineAction = new TypeAction("Line", LINE, 'L', CTRL_DOWN_MASK);88 rectangleAction = new TypeAction("Rectangle", RECTANGLE, 'R', CTRL_DOWN_MASK);89 circleAction = new TypeAction("Circle", CIRCLE,'C', CTRL_DOWN_MASK);90 curveAction = new TypeAction("Curve", CURVE,'U', CTRL_DOWN_MASK);91

92 //Initialize the array

93 TypeAction[] actions ={lineAction, rectangleAction, circleAction, curveAction};94 typeActions =actions;95

96 //Add toolbar icons

97 lineAction.putValue(LARGE_ICON_KEY, LINE24);98 rectangleAction.putValue(LARGE_ICON_KEY, RECTANGLE24);99 circleAction.putValue(LARGE_ICON_KEY, CIRCLE24);100 curveAction.putValue(LARGE_ICON_KEY, CURVE24);101

102 //Add menu item icons

103 lineAction.putValue(SMALL_ICON, LINE16);104 rectangleAction.putValue(SMALL_ICON, RECTANGLE16);105 circleAction.putValue(SMALL_ICON, CIRCLE16);106 curveAction.putValue(SMALL_ICON, CURVE16);107

108 //Add tooltip text

109 lineAction.putValue(SHORT_DESCRIPTION, "Draw lines");110 rectangleAction.putValue(SHORT_DESCRIPTION, "Draw rectangles");111 circleAction.putValue(SHORT_DESCRIPTION, "Draw circles");112 curveAction.putValue(SHORT_DESCRIPTION, "Draw curves");113 }114

115 //Create the Elements menu

116 private voidcreateElementMenu() {117 createElementTypeActions();118 elementMenu = new JMenu("Elements"); //Create Elements menu

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

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

122 }123

124 //Create Color menu actions

125 private voidcreateElementColorActions() {126 redAction = new ColorAction("Red", RED, 'R', CTRL_DOWN_MASK|ALT_DOWN_MASK);127 yellowAction = new ColorAction("Yellow", YELLOW, 'Y', CTRL_DOWN_MASK|ALT_DOWN_MASK);128 greenAction = new ColorAction("Green", GREEN, 'G', CTRL_DOWN_MASK|ALT_DOWN_MASK);129 blueAction = new ColorAction("Blue", BLUE, 'B', CTRL_DOWN_MASK|ALT_DOWN_MASK);130

131 //Initialize the array

132 ColorAction[] actions ={redAction, greenAction, blueAction, yellowAction};133 colorActions =actions;134

135 //Add toolbar icons

136 redAction.putValue(LARGE_ICON_KEY, RED24);137 greenAction.putValue(LARGE_ICON_KEY, GREEN24);138 blueAction.putValue(LARGE_ICON_KEY, BLUE24);139 yellowAction.putValue(LARGE_ICON_KEY, YELLOW24);140

141 //Add menu item icons

142 redAction.putValue(SMALL_ICON, RED16);143 greenAction.putValue(SMALL_ICON, GREEN16);144 blueAction.putValue(SMALL_ICON, BLUE16);145 yellowAction.putValue(SMALL_ICON, YELLOW16);146

147 //Add tooltip text

148 redAction.putValue(SHORT_DESCRIPTION, "Draw in red");149 blueAction.putValue(SHORT_DESCRIPTION, "Draw in blue");150 greenAction.putValue(SHORT_DESCRIPTION, "Draw in green");151 yellowAction.putValue(SHORT_DESCRIPTION, "Draw in yellow");152 }153

154 //Create the Color menu

155 private voidcreateColorMenu() {156 createElementColorActions();157 colorMenu = new JMenu("Color"); //Create Elements menu

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

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

161 }162

163 //Menu creation helper

164 private voidcreateRadioButtonDropDown(JMenu menu, Action[] actions, Action selected) {165 ButtonGroup group = newButtonGroup();166 JRadioButtonMenuItem item = null;167 for(Action action : actions) {168 group.add(menu.add(item = newJRadioButtonMenuItem(action)));169 if(action ==selected) {170 item.setSelected(true); //This is default selected

171 }172 }173 }174

175 //Create toolbar buttons on the toolbar

176 private voidcreateToolbar() {177 for(FileAction action: fileActions){178 if(action != exitAction && action !=closeAction)179 addToolbarButton(action); //Add the toolbar button

180 }181 toolBar.addSeparator();182

183 //Create Color menu buttons

184 for(ColorAction action:colorActions){185 addToolbarButton(action); //Add the toolbar button

186 }187

188 toolBar.addSeparator();189

190 //Create Elements menu buttons

191 for(TypeAction action:typeActions){192 addToolbarButton(action); //Add the toolbar button

193 }194 }195

196 //Create and add a toolbar button

197 private voidaddToolbarButton(Action action) {198 JButton button = new JButton(action); //Create from Action

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

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

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

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

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

204 }205

206 //Set radio button menu checks

207 private voidsetChecks(JMenu menu, Object eventSource) {208 if(eventSource instanceofJButton){209 JButton button =(JButton)eventSource;210 Action action =button.getAction();211 for(int i = 0 ; i < menu.getItemCount() ; ++i) {212 JMenuItem item =menu.getItem(i);213 item.setSelected(item.getAction() ==action);214 }215 }216 }217

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

219 class FileAction extendsAbstractAction {220 //Create action with a name

221 FileAction(String name) {222 super(name);223 }224

225 //Create action with a name and accelerator

226 FileAction(String name, char ch, intmodifiers) {227 super(name);228 putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));229

230 //Now find the character to underline

231 int index =name.toUpperCase().indexOf(ch);232 if(index != -1) {233 putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);234 }235 }236

237 //Event handler

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

240 }241 }242

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

244 class TypeAction extendsAbstractAction {245 //Create action with just a name property

246 TypeAction(String name, inttypeID) {247 super(name);248 this.typeID =typeID;249 }250

251 //Create action with a name and an accelerator

252 private TypeAction(String name,int typeID, char ch, intmodifiers) {253 this(name, typeID);254 putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));255

256 //Now find the character to underline

257 int index =name.toUpperCase().indexOf(ch);258 if(index != -1) {259 putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);260 }261 }262

263 public voidactionPerformed(ActionEvent e) {264 elementType =typeID;265 setChecks(elementMenu, e.getSource());266 }267

268 private inttypeID;269 }270

271 //Handles color menu items

272 class ColorAction extendsAbstractAction {273 //Create an action with a name and a color

274 publicColorAction(String name, Color color) {275 super(name);276 this.color =color;277 }278

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

280 public ColorAction(String name, Color color, char ch, intmodifiers) {281 this(name, color);282 putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));283

284 //Now find the character to underline

285 int index =name.toUpperCase().indexOf(ch);286 if(index != -1) {287 putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);288 }289 }290

291 public voidactionPerformed(ActionEvent e) {292 elementColor =color;293 setChecks(colorMenu, e.getSource());294 }295

296 privateColor color;297 }298

299 //File actions

300 privateFileAction newAction, openAction, closeAction, saveAction, saveAsAction, printAction, exitAction;301 private FileAction[] fileActions; //File actions as an array302

303 //Element type actions

304 privateTypeAction lineAction, rectangleAction, circleAction, curveAction;305 private TypeAction[] typeActions; //Type actions as an array306

307 //Element color actions

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

310

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

312 private JMenu elementMenu; //Elements menu

313 private JMenu colorMenu; //Color menu

314

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

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

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

318 }

 类似资料: