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

作者: mannixiang
发布时间:2015-07-06 18:00:58

控制台程序。

要为菜单项添加图标以补充工具栏图标,只需要在创建菜单项的Action对象中添加IconImage对象,作为SMALL_ICON键的值即可。

 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 }

 

标签: Java Sketch
来源:http://www.cnblogs.com/mannixiang/p/3486717.html

推荐: