Javaベースの処理イベント-メニューアイコンの追加(Sketcher 8 with toolbar buttons and menu icons)...
59190 ワード
コンソール・プログラム
メニュー項目にアイコンを追加してツールバーアイコンを補完するには、メニュー項目を作成したActionオブジェクトにSMALL_としてIconImageオブジェクトを追加するだけです.ICONキーの値でOKです.
転載先:https://www.cnblogs.com/mannixiang/p/3486717.html
メニュー項目にアイコンを追加してツールバーアイコンを補完するには、メニュー項目を作成したActionオブジェクトにSMALL_としてIconImageオブジェクトを追加するだけです.ICONキーの値でOKです.
1 // Defines application wide constants
2 package Constants;
3 import java.awt.Color;
4 import javax.swing.*;
5
6 public class SketcherConstants {
7 // Path for images
8 public final static String imagePath = "E:/JavaProject/BeginningJava/Images/";
9
10 // Toolbar icons
11 public final static Icon NEW24 = new ImageIcon(imagePath + "New24.gif");
12 public final static Icon OPEN24 = new ImageIcon(imagePath + "Open24.gif");
13 public final static Icon SAVE24 = new ImageIcon(imagePath + "Save24.gif");
14 public final static Icon SAVEAS24 = new ImageIcon(imagePath + "SaveAs24.gif");
15 public final static Icon PRINT24 = new ImageIcon(imagePath + "Print24.gif");
16
17 public final static Icon LINE24 = new ImageIcon(imagePath + "Line24.gif");
18 public final static Icon RECTANGLE24 = new ImageIcon(imagePath + "Rectangle24.gif");
19 public final static Icon CIRCLE24 = new ImageIcon(imagePath + "Circle24.gif");
20 public final static Icon CURVE24 = new ImageIcon(imagePath + "Curve24.gif");
21
22 public final static Icon RED24 = new ImageIcon(imagePath + "Red24.gif");
23 public final static Icon GREEN24 = new ImageIcon(imagePath + "Green24.gif");
24 public final static Icon BLUE24 = new ImageIcon(imagePath + "Blue24.gif");
25 public final static Icon YELLOW24 = new ImageIcon(imagePath + "Yellow24.gif");
26
27 // Menu item icons
28 public final static Icon NEW16 = new ImageIcon(imagePath + "new16.gif");
29 public final static Icon OPEN16 = new ImageIcon(imagePath + "Open16.gif");
30 public final static Icon SAVE16 = new ImageIcon(imagePath + "Save16.gif");
31 public final static Icon SAVEAS16 = new ImageIcon(imagePath + "SaveAs16.gif");
32 public final static Icon PRINT16 = new ImageIcon(imagePath + "print16.gif");
33
34 public final static Icon LINE16 = new ImageIcon(imagePath + "Line16.gif");
35 public final static Icon RECTANGLE16 = new ImageIcon(imagePath + "Rectangle16.gif");
36 public final static Icon CIRCLE16 = new ImageIcon(imagePath + "Circle16.gif");
37 public final static Icon CURVE16 = new ImageIcon(imagePath + "Curve16.gif");
38
39 public final static Icon RED16 = new ImageIcon(imagePath + "Red16.gif");
40 public final static Icon GREEN16 = new ImageIcon(imagePath + "Green16.gif");
41 public final static Icon BLUE16 = new ImageIcon(imagePath + "Blue16.gif");
42 public final static Icon YELLOW16 = new ImageIcon(imagePath + "Yellow16.gif");
43
44 // Element type definitions
45 public final static int LINE = 101;
46 public final static int RECTANGLE = 102;
47 public final static int CIRCLE = 103;
48 public final static int CURVE = 104;
49
50 // Initial conditions
51 public final static int DEFAULT_ELEMENT_TYPE = LINE;
52 public final static Color DEFAULT_ELEMENT_COLOR = Color.BLUE;
53 }
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 extends JFrame {
15 // Constructor
16 public SketcherFrame(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 void createFileMenuActions() {
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 void createFileMenu() {
60 JMenu fileMenu = new JMenu("File"); // Create File menu
61 fileMenu.setMnemonic('F'); // Create shortcut
62 createFileMenuActions(); // Create Actions for File menu item
63
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 void createElementTypeActions() {
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 void createElementMenu() {
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 void createElementColorActions() {
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 void createColorMenu() {
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 void createRadioButtonDropDown(JMenu menu, Action[] actions, Action selected) {
146 ButtonGroup group = new ButtonGroup();
147 JRadioButtonMenuItem item = null;
148 for(Action action : actions) {
149 group.add(menu.add(item = new JRadioButtonMenuItem(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 void createToolbar() {
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 void addToolbarButton(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 void setChecks(JMenu menu, Object eventSource) {
188 if(eventSource instanceof JButton){
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 extends AbstractAction {
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, int modifiers) {
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 void actionPerformed(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 extends AbstractAction {
225 // Create action with just a name property
226 TypeAction(String name, int typeID) {
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, int modifiers) {
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 void actionPerformed(ActionEvent e) {
244 elementType = typeID;
245 setChecks(elementMenu, e.getSource());
246 }
247
248 private int typeID;
249 }
250
251 // Handles color menu items
252 class ColorAction extends AbstractAction {
253 // Create an action with a name and a color
254 public ColorAction(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, int modifiers) {
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 void actionPerformed(ActionEvent e) {
272 elementColor = color;
273 setChecks(colorMenu, e.getSource());
274 }
275
276 private Color color;
277 }
278
279 // File actions
280 private FileAction newAction, openAction, closeAction, saveAction, saveAsAction, printAction, exitAction;
281 private FileAction[] fileActions; // File actions as an array
282
283 // Element type actions
284 private TypeAction lineAction, rectangleAction, circleAction, curveAction;
285 private TypeAction[] typeActions; // Type actions as an array
286
287 // Element color actions
288 private ColorAction 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 }
1 // Sketching application
2 import javax.swing.*;
3 import java.awt.*;
4 import java.awt.event.*;
5
6 public class Sketcher {
7 public static void main(String[] args) {
8 theApp = new Sketcher(); // Create the application object
9 SwingUtilities.invokeLater(new Runnable() {
10 public void run() {
11 theApp.createGUI(); // Call GUI creator
12 }
13 });
14 }
15
16 // Method to create the application GUI
17 private void createGUI() {
18 window = new SketcherFrame("Sketcher"); // Create the app window
19 Toolkit theKit = window.getToolkit(); // Get the window toolkit
20 Dimension wndSize = theKit.getScreenSize(); // Get screen size
21
22 // Set the position to screen center & size to half screen size
23 window.setSize(wndSize.width/2, wndSize.height/2); // Set window size
24 window.setLocationRelativeTo(null); // Center window
25
26 window.addWindowListener(new WindowHandler()); // Add window listener
27 window.setVisible(true);
28 }
29
30 // Handler class for window events
31 class WindowHandler extends WindowAdapter {
32 // Handler for window closing event
33 @Override
34 public void windowClosing(WindowEvent e) {
35 // Code to be added here...
36 }
37 }
38
39 private SketcherFrame window; // The application window
40 private static Sketcher theApp; // The application object
41 }
転載先:https://www.cnblogs.com/mannixiang/p/3486717.html