- Screen Designer
- Writing Event Handlers
- Menu Designer
- In Practice
- Summary
Menu Designer
The Screen Designer is used to show all graphical aspects of your screen, but it does not show a menu assigned to a given frame. They are available only in the Component tree on the bottom left, but not shown graphically. If the Component tree is not enough to visually interpret the menu, you can also see the menu graphically by activating the Menu Designer. There are two methods by which you can activate the designer. Double-clicking on the Component tree menu item starts the Menu Designer in addition to right-clicking on and selecting Activate Designer. The Menu Designer toolbar becomes available. To ultimately use the Menu Designer, you must first drop the component for a menu onto the desired frame. The following menu types are available within the JBuilder environment:
From the Swing Containers palette: JMenuBar JPopUpMenu
From the AWT palette: MenuBar PopUpMenu
Drop a menu component anywhere onto on the frame or drop it onto the Component tree. Menu components are always placed under the Menu folder of the Component tree regardless of where it is dropped.
Menu Designer Buttons
When the Menu Designer is instantiated by JBuilder, many tools become available, which were not seen in the Screen Designer, to build your menu. For a description of all the Menu Designer tools, see Table 3.1.
Table 3.1 Action Buttons for the Menu Designer
Button |
Action |
Insert Item |
Adds a new menu item before the selected one. |
Insert Separator |
Adds a separator between items to divide them into logical groupings. |
Insert Nested Menu |
Adds a submenu or nested menu to the selected menu item. |
Delete Item |
Deletes the selected menu item. |
Enable/Disable Toggle |
Enables or disables the selected item. (This is the initial state unless changed programmatically.) |
Checkable/Uncheckable |
Makes the selected item have an initial state of checked or unchecked. |
Toggle |
Toggles the menu item between being a JMenuItem or a JradioButtonMenuItem. |
Building a Menu with the Menu Designer
Now we'll build a simple menu and see the results that JBuilder gives us. Just like in the Screen Designer, JBuilder is a two-way tool in the Menu Designer also. As a menu is constructed graphically, JBuilder is developing the physical source code.
NOTE
A menu is visible only while either in the Menu Designer or during application execution. You will not see a menu while in the Screen Designer.
When you build a menu, JBuilder implements the menu in the jbInit() method of your frame class. This also includes any design-time properties for the menu, such as disable/enable and accelerators. For example, let's build a menu that has two headings File and Help. Under File, we will place a menu item to exit us from the system. Under Help, we'll create Help Topics and About menu choices. Place a keyboard accelerator for the exit to be Ctrl+X. The following code demonstrates the successful implementation of a menu constructed by JBuilder. We'll go step-by-step through the process of building the menu. To help in this construction, the following steps are required to build this menu:
Select the Screen Designeryes, the Screen Designer. This enables you to drop a container to hold your menu.
Drop a JMenuBar anywhere on your frame. This component is located under the Swing Containers tab.
Right-click on the jMenuBar1 object created under the Menu folder of the Component tree and choose Activate Designer.
In the blank of the first menu item, type File. The Menu Designer automatically adds a blank menu item to append to a menu list.
In the Inspector, change the properties as desired.
Repeat until all the menu items are completed.
Now that the menu is complete, Listing 3.5 shows the code that JBuilder constructed while we were building the menu. We did not write any code; the Menu Designer did it all.
Listing 3.5 The Results of Building a Menu with the Menu Designer
... private void jbInit() throws Exception { //setIconImage(Toolkit.getDefaultToolkit().createImage( _ FrmDemo.class.getResource("[Your Icon]"))); contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(xYLayout1); this.setSize(new Dimension(400, 300)); this.setTitle("Designer Demo"); //Code to setup the menu jmnFile.setText("File"); jmnitmExit.setText("E&xit"); jmnitmExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(88, _ java.awt.event.KeyEvent.CTRL_MASK, false)); jmnitmExit.addActionListener(new FrmDemo_jmnitmExit_actionAdapter(this)); jmnHelp.setText("Help"); jmnitmHelpTopics.setText("Help Topics"); jmnitmAbout.setEnabled(false); jmnitmAbout.setText("About"); jMenuBar1.add(jmnFile); jMenuBar1.add(jmnHelp); jmnFile.add(jmnitmExit); jmnHelp.add(jmnitmHelpTopics); jmnHelp.addSeparator(); jmnHelp.add(jmnitmAbout); } ...
Implementing a Menu Action
When a menu is defined, it maybut nothing requires ithave an event handler just like the event handlers identified earlier with GUI components. To create an event handler and implement an action for a menu item, execute the following steps:
Activate the Menu Designer.
Select the menu item to create an event handler.
Click on the Events tab of the Inspector pane.
Double-click on the appropriate event.
Add implementation code for desired business logic. For example, add System.exit(0) for the Exit menu item of your menu.
Finally, associate the newly created menu with the panel. This is accomplished by setting the JPanel property for JMenu to the menu name.
Notice after the event has been produced that the code generated follows the same rules as anonymous and standard adapters for the events in components. For example, every application needs the capability to exit. The following example implements the System.exit(0) to shut down the application. Listing 3.6 shows what the generated code looks like.
Listing 3.6 Implementing an Event Within a Menu Item
private void jbInit() throws Exception { ... jmnitmExit.setText("Exit"); jmnitmExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(88, _ java.awt.event.KeyEvent.CTRL_MASK, false)); jmnitmExit.addActionListener(new FrmDemo_jmnitmExit_actionAdapter(this)); ... } ... void jmnitmExit_actionPerformed(ActionEvent e) { System.exit(0); } } class FrmDemo_jmnitmExit_actionAdapter implements _ java.awt.event.ActionListener { FrmDemo adaptee; FrmDemo_jmnitmExit_actionAdapter(FrmDemo adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.jmnitmExit_actionPerformed(e); } }
Creating a Pop-Up Menu
A pop-up menu is simply a menu that is not attached to any menu bar but floats when activated. The activation sequence for a pop-up menu is typically implemented using the secondary mouse button. A pop-up menu is useful for context-sensitive actions that need to be accomplished based on a certain selection or range. A good example is cut, copy, and paste. You can create a pop-up menu by doing the following:
-
In the UI Designer, click on a PopupMenu component from the AWT page of the Component palette or a JPopupMenu component from the Swing Containers page and drop it onto the Component tree.
-
Name the component jpmnuEdit.
- Activate the Menu Designer for the dropped objects.
Add Cut, Copy, and Paste menu items as you did with JMenu.
-
Select any component on the UI and activate the Screen Designer.
-
Select the component you want to activate the pop-up menu with.
-
Select the event to activate the pop-up menu. The event normally tasked with this event is mouse click.
-
Add this code to the event chosen to activate the pop-up menu.
-
Review what has been generated by the designer by switching to the Source tab. Listing 3.7 demonstrates what the generated code should look like.
Listing 3.7 Generation of a Pop-Up Menu Using the Menu Designer
void contentPane_mouseClicked(MouseEvent e) { contentPane.add(jpmnuEdit); if (e.getModifiers() == Event.META_MASK) { // Make the jPopupMenu visible relative to the _ current mouse position in the container. jpmnuEdit.show(contentPane, e.getX(), e.getY()); } }
-
Add event handlers to the pop-up menu to support the required functionality.