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


    控制台程序。

    工具栏在应用程序窗口中通常位于内容面板顶部的菜单栏下,包含直接访问菜单选项的按钮。在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 }
  • 相关阅读:
    Beta 答辩总结
    Beta 冲刺 (7/7)
    Beta 冲刺 (6/7)
    Beta 冲刺 (5/7)
    Beta 冲刺 (4/7)
    Beta 冲刺 (3/7)
    软件产品案例分析(团队)
    概率图模型7:条件随机场(2)
    推荐系统概述3
    概率图模型6:条件随机场(1)
  • 原文地址:https://www.cnblogs.com/mannixiang/p/3486712.html
Copyright © 2020-2023  润新知