第一部分——使用 Flash CS4 为本地菜单创建 AIR 子菜单——《The Essential Guide to Flash CS4 AIR Development Highlight》的第二部分。
第二部分——使用 Flash CS4 创建 AIR 本地菜单——《The Essential Guide to Flash CS4 AIR Development Highlight》的第一部分。
下一步,您将应用 menuItemSelected() 方法,每次用户选择该上下文菜单上的一项时该方法都会启动。当发生选择事件时,事件监听程序方法会收到一个 flash.events.Event 类的实例作为参数。该选择事件通过菜单上选定的元素,经过菜单的层次结构,传递到根元素。
作为参数接收的对象拥有以下两个属性:
- target
- currentTarget
如果该事件已直接在菜单的元素上注册(比如在这个示例中),那么这两个属性将拥有相同的值。在这个示例中,两个属性都引用已选中的 NativeMenuItem 类的实例。但是,如果该事件注册在根菜单或者子菜单的一个根上,则接收的事件对象的目标属性将总是引用选定的元素。currentTarget 属性将总是引用事件注册的对象。
当一个项目被选中时,menuItemSelected() 方法将所选元素的标签写入 TextArea,TextArea可以作为一个文本输出控制台。这里是代码:
// called on click on menu items
private function menuItemSelected( evt : Event ):void
{
// access NativeMenuItem instance selected
var item:NativeMenuItem = evt.target as NativeMenuItem;
// write in the textarea selected item's label
output.appendText( "CLICKED ON: " + item.label + File.lineEnding );
}
Displaying the code for the native submenus
This is the complete Ch06p01.as class that handles with the menuItemSelected() method:
package com.comtaste.foed.essentialair.chapter6
{
import fl.controls.Button;
import fl.controls.TextArea;
import flash.display.MovieClip;
import flash.display.NativeMenu;
import flash.display.NativeMenuItem;
import flash.events.Event;
import flash.filesystem.File;
public class Ch06p01 extends MovieClip
{
// onstage components
public var button:Button;
public var output:TextArea;
// class properties
private var menuRoot:NativeMenu;
public function Ch06p01()
{
super();
// generate native menu to use
createNativeMenu();
// assign menu to right- click on button
button.contextMenu = menuRoot;
}
// create a complete native menu
private function createNativeMenu():void
{
// instantiate main menu object
menuRoot = new NativeMenu();
// append subMenus to menu root
menuRoot.addItem( createFirstSubMenu() );
menuRoot.addItem( createSecondSubMenu() );
}
private function createFirstSubMenu():NativeMenuItem
{
// create first submenu
var subMenu:NativeMenuItem =
new NativeMenuItem( "My first custom submenu" );
// initialize child container
subMenu.submenu = new NativeMenu();
// create first submenu child
var subMenuItem1:NativeMenuItem =
new NativeMenuItem( "menu 1 item 1" );
// register event listener for menu item
subMenuItem1.addEventListener( Event.SELECT,
menuItemSelected );
// add item to submenu
subMenu.submenu.addItem( subMenuItem1 );
// create a second child, register event listener for
// selection event and assign to submenu
var subMenuItem2:NativeMenuItem =
new NativeMenuItem( "menu 1 item 2" );
subMenuItem2.addEventListener( Event.SELECT,
menuItemSelected );
subMenu.submenu.addItem( subMenuItem2 );
return subMenu;
}
private function createSecondSubMenu():NativeMenuItem
{
// create first submenu
var subMenu:NativeMenuItem =
new NativeMenuItem( "Second submenu" );
// initialize child container
subMenu.submenu = new NativeMenu();
// create first submenu child
var subMenuItem1:NativeMenuItem =
new NativeMenuItem( "menu 2 item 1" );
// register event listener for menu item
subMenuItem1.addEventListener( Event.SELECT,
menuItemSelected );
// add item to submenu
subMenu.submenu.addItem( subMenuItem1 );
// add a separator item
// label will be ignored for separator items
var subMenuSeparator:NativeMenuItem =
new NativeMenuItem( "", true );
// add separator to menu
subMenu.submenu.addItem( subMenuSeparator );
// create a second child, register event listener for
// selection event and assign to submenu
var subMenuItem2:NativeMenuItem =
new NativeMenuItem( "menu 2 item 2" );
subMenuItem2.addEventListener( Event.SELECT,
menuItemSelected );
subMenu.submenu.addItem( subMenuItem2 );
// create a new item as an internal submenu
// using addSubmenu command
var childSubMenu:NativeMenuItem =
subMenu.submenu.addSubmenu( new NativeMenu(),
"Nested menu" );
// initialize child container
childSubMenu.submenu = new NativeMenu();
// create a child, register event listener for
// selection event and assign to internal submenu
var subMenuItem3:NativeMenuItem =
new NativeMenuItem( "menu 2 nested item 1" );
subMenuItem3.addEventListener( Event.SELECT, menuItemSelected );
childSubMenu.submenu.addItem( subMenuItem3 );
return subMenu;
}
// called on click
private function menuItemSelected( evt : Event ):void
{
var item:NativeMenuItem = evt.target as NativeMenuItem;
output.appendText( "CLICKED ON: "
+ item.label + File.lineEnding );
}
} // close class
} // close package
测试本地菜单
现在可以测试该应用程序了。要测试该程序,返回 Flash ch06p01.fla. project。然后从 Flash CS4 Controls 菜单选择 Test Movie 命令,运行该应用程序。编译并执行后,右键单击(在 Mac OS X 系统中,使用 Ctrl-单击)窗口中央的按钮。您准备的本地菜单将会出现。您可以在图 6-4 中查看该应用程序。
每次从上下文菜单选择项目后,所选元素的标签将会显示在 TextArea 中。在下一部分,您将学习如何在实际应用程序中使用窗口级别和应用程序级别的菜单。