Java基础之处理事件——添加工具栏(Sketcher 7 with File toolbar buttons)

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

控制台程序。

工具栏在应用程序窗口中通常位于内容面板顶部的菜单栏下,包含直接访问菜单选项的按钮。在Sketcher程序中可以为最常用的菜单项添加工具栏。

工具栏是javax.swing.JToolBar类定义的Swing组件。想SketcherFrame类定义中添加如下域,可以为这个类添加一个用于工具栏的成员:

private JToolBar toolBar = new JToolBar();

为了把工具栏添加到应用程序窗口中,需要在SkecherFrame构造函数已有代码的后面添加如下语句:

getContentPane().add(toolBar,BorderLayout.NORTH);

对图标的引用一般存储在javax.swing.Icon类型的变量中,javax.swing.Icon是接口,其中声明的方法getHeight()和getWidth()分别用来返回图标的高度和宽度(以像素为单位)。Icon接口还声明了paint()方法,用来在组件上绘制图标图像。javax.swing.ImageIcon类实现了Icon接口,使用这个类在程序中通过包含定义图标图像数据的文件来创建图标对象。

ImageIcon类有多个构造函数,这里使用的构造函数仅仅接收一个String参数,这个参数指定了包含图标图像的文件的路径。传送为参数的String对象可以只是文件名,此时文件应位于Sketcher执行时的当前目录下。

在自定义包中指定图标文件的路径:

 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   // Element type definitions  18   public final static int LINE      = 101;  19   public final static int RECTANGLE = 102;  20   public final static int CIRCLE    = 103;  21   public final static int CURVE     = 104;  22   23   // Initial conditions  24   public final static int DEFAULT_ELEMENT_TYPE = LINE;  25   public final static Color DEFAULT_ELEMENT_COLOR = Color.BLUE;  26 }

 

  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    51   // Create the File menu   52   private void createFileMenu() {   53     JMenu fileMenu = new JMenu("File");                                // Create File menu   54     fileMenu.setMnemonic('F');                                         // Create shortcut   55     createFileMenuActions();                                           // Create Actions for File menu item   56    57     // Construct the file drop-down menu   58     fileMenu.add(newAction);                                           // New Sketch menu item   59     fileMenu.add(openAction);                                          // Open sketch menu item   60     fileMenu.add(closeAction);                                         // Close sketch menu item   61     fileMenu.addSeparator();                                           // Add separator   62     fileMenu.add(saveAction);                                          // Save sketch to file   63     fileMenu.add(saveAsAction);                                        // Save As menu item   64     fileMenu.addSeparator();                                           // Add separator   65     fileMenu.add(printAction);                                         // Print sketch menu item   66     fileMenu.addSeparator();                                           // Add separator   67     fileMenu.add(exitAction);                                          // Print sketch menu item   68     menuBar.add(fileMenu);                                             // Add the file menu   69   }   70    71   // Create Element menu actions   72   private void createElementTypeActions() {   73     lineAction = new TypeAction("Line", LINE, 'L', CTRL_DOWN_MASK);   74     rectangleAction = new TypeAction("Rectangle", RECTANGLE, 'R', CTRL_DOWN_MASK);   75     circleAction =  new TypeAction("Circle", CIRCLE,'C', CTRL_DOWN_MASK);   76     curveAction = new TypeAction("Curve", CURVE,'U', CTRL_DOWN_MASK);   77    78     // Initialize the array   79     TypeAction[] actions = {lineAction, rectangleAction, circleAction, curveAction};   80     typeActions = actions;   81   }   82    83   // Create the Elements menu   84   private void createElementMenu() {   85     createElementTypeActions();   86     JMenu elementMenu = new JMenu("Elements");                         // Create Elements menu   87     elementMenu.setMnemonic('E');                                      // Create shortcut   88     createRadioButtonDropDown(elementMenu, typeActions, lineAction);   89     menuBar.add(elementMenu);                                          // Add the element menu   90   }   91    92   // Create Color menu actions   93   private void createElementColorActions() {   94     redAction = new ColorAction("Red", RED, 'R', CTRL_DOWN_MASK|ALT_DOWN_MASK);   95     yellowAction = new ColorAction("Yellow", YELLOW, 'Y', CTRL_DOWN_MASK|ALT_DOWN_MASK);   96     greenAction = new ColorAction("Green", GREEN, 'G', CTRL_DOWN_MASK|ALT_DOWN_MASK);   97     blueAction = new ColorAction("Blue", BLUE, 'B', CTRL_DOWN_MASK|ALT_DOWN_MASK);   98    99     // Initialize the array  100     ColorAction[] actions = {redAction, greenAction, blueAction, yellowAction};  101     colorActions = actions;  102   }  103   104   // Create the Color menu  105   private void createColorMenu() {  106     createElementColorActions();  107     JMenu colorMenu = new JMenu("Color");                              // Create Elements menu  108     colorMenu.setMnemonic('C');                                        // Create shortcut  109     createRadioButtonDropDown(colorMenu, colorActions, blueAction);  110     menuBar.add(colorMenu);                                            // Add the color menu  111   }  112   113   // Menu creation helper  114   private void createRadioButtonDropDown(JMenu menu, Action[] actions, Action selected) {  115     ButtonGroup group = new ButtonGroup();  116     JRadioButtonMenuItem item = null;  117     for(Action action : actions) {  118       group.add(menu.add(item = new JRadioButtonMenuItem(action)));  119       if(action == selected) {  120         item.setSelected(true);                                        // This is default selected  121       }  122     }  123   }  124   125   // Create toolbar buttons on the toolbar  126   private void createToolbar() {  127     for(FileAction action: fileActions){  128       if(action != exitAction && action != closeAction)  129         addToolbarButton(action);                                      // Add the toolbar button  130     }  131  }  132   133   // Create and add a toolbar button  134   private void addToolbarButton(Action action) {  135     JButton button = new JButton(action);                              // Create from Action  136     button.setBorder(BorderFactory.createCompoundBorder(               // Add button border  137            new EmptyBorder(2,5,5,2),                                   // Outside border  138            BorderFactory.createRaisedBevelBorder()));                  // Inside border  139     button.setHideActionText(true);                                    // No label on the button  140     toolBar.add(button);                                               // Add the toolbar button  141   }  142   143   // Inner class defining Action objects for File menu items  144   class FileAction extends AbstractAction {  145     // Create action with a name  146     FileAction(String name) {  147       super(name);  148     }  149   150     // Create action with a name and accelerator  151     FileAction(String name, char ch, int modifiers) {  152       super(name);  153       putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));  154   155       // Now find the character to underline  156       int index = name.toUpperCase().indexOf(ch);  157       if(index != -1) {  158         putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);  159       }  160     }  161   162     // Event handler  163     public void actionPerformed(ActionEvent e) {  164       // You will add action code here eventually...  165     }  166   }  167   168   // Inner class defining Action objects for Element type menu items  169   class TypeAction extends AbstractAction {  170     // Create action with just a name property  171     TypeAction(String name, int typeID) {  172       super(name);  173       this.typeID = typeID;  174     }  175   176     // Create action with a name and an accelerator  177     private TypeAction(String name,int typeID, char ch, int modifiers) {  178       this(name, typeID);  179       putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));  180   181       // Now find the character to underline  182       int index = name.toUpperCase().indexOf(ch);  183       if(index != -1) {  184         putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);  185       }  186     }  187   188     public void actionPerformed(ActionEvent e) {  189       elementType = typeID;  190     }  191   192     private int typeID;  193   }  194   195   // Handles color menu items  196   class ColorAction  extends AbstractAction {  197     // Create an action with a name and a color  198     public ColorAction(String name, Color color) {  199       super(name);  200       this.color = color;  201     }  202   203     // Create an action with a name, a color, and an accelerator  204     public ColorAction(String name, Color color, char ch, int modifiers) {  205       this(name, color);  206       putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(ch, modifiers));  207   208       // Now find the character to underline  209       int index = name.toUpperCase().indexOf(ch);  210       if(index != -1) {  211         putValue(DISPLAYED_MNEMONIC_INDEX_KEY, index);  212       }  213     }  214   215     public void actionPerformed(ActionEvent e) {  216       elementColor = color;  217     }  218   219     private Color color;  220   }  221   222   // File actions  223   private FileAction newAction, openAction, closeAction, saveAction, saveAsAction, printAction, exitAction;  224   private FileAction[] fileActions;                                    // File actions as an array  225   226   // Element type actions  227   private TypeAction lineAction, rectangleAction, circleAction, curveAction;  228   private TypeAction[] typeActions;                                    // Type actions as an array  229   230 // Element color actions  231   private ColorAction redAction, yellowAction,greenAction, blueAction;  232   private ColorAction[] colorActions;                                  // Color actions as an array  233   234   private JMenuBar menuBar = new JMenuBar();                           // Window menu bar  235   private Color elementColor = DEFAULT_ELEMENT_COLOR;                  // Current element color  236   private int elementType = DEFAULT_ELEMENT_TYPE;                      // Current element type  237   private JToolBar toolBar = new JToolBar();                           // Window toolbar  238 }

 

 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/3486712.html

推荐: