• flex>菜单设计 小强斋


     菜单设计

    菜单主要的作用就是功能模块的导航,通过菜单,用户可以快速的切换到需要的功能。Flex中的菜单大体有三种:上下文菜单、菜单条以及弹出式菜单

    一、上下文菜单的设计
    上下文菜单是菜单的基础形式,如常用的右键菜单。上下文菜单定义比较灵活,可以在任意位置、任意组件上弹出菜单。

    1.1 使用Menu控件创建菜单
    在Flex中,上下文菜单的设计需要依靠Menu类来实现。在Menu类的createMenu方法中,已经定义了创建菜单所需要的基本要素,并以参数的形式设置。createMenu方法的语法格式如下所示。 public static function createMenu(parent:DisplayObjectContainer, mdp:Object, showRoot:Boolean = true):Menu 参数说明:
    parent:放置菜单控件的父容器。
    mdp:菜单控件显示的数据源。
    showRoot:在菜单上是否显示数据源的根节点。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	
    	<mx:Style>
    		.MenuStyle
    		{
    			fontSize : 14;
    		}
    	</mx:Style>
    	
    	<mx:Script>
    		<![CDATA[
    			// 导入 Menu 类
    			import mx.controls.Menu;
    			// 创建一个 Menu 控件
    			private function createAndShow():void 
    			{
    				var myMenu:Menu = Menu.createMenu(null, myMenuData, false);
    				myMenu.labelField="@label";
    				myMenu.styleName = "MenuStyle";
    				myMenu.show(myButton.x + myButton.width, myButton.y + myButton.height);
    			}
    		]]>
    	</mx:Script>
    	
    	<!-- 定义菜单数据 -->
    	<mx:XML format="e4x" id="myMenuData">
    		<root>
    			<menuitem label="菜单 A" >
    				<menuitem label="子菜单 A-1" enabled="false"/>
    				<menuitem label="子菜单 A-2"/>
    			</menuitem>
    			<menuitem label="菜单 B" type="check" toggled="true"/>
    			<menuitem label="菜单 C" type="check" toggled="false"/>
    			<menuitem type="separator"/>
    			<menuitem label="菜单 D" >
    				<menuitem label="子菜单 D-1" type="radio" groupName="one"/>
    				<menuitem label="子菜单 D-2" type="radio" groupName="one" toggled="true"/>
    				<menuitem label="子菜单 D-3" type="radio" groupName="one"/>
    			</menuitem>
    		</root>
    	</mx:XML>
    
    	<mx:Button id="myButton" label="打开菜单" fontSize="14" 
    		click="createAndShow();" x="31" y="27"/>
    
    </mx:Application>
    


    1.2 菜单事件
    在菜单控件中,定义了几个常用的事件,包括单击菜单项、更改当前选择菜单、菜单显示和隐藏等。这些事件类型包含在MenuEvent类中,

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	
    	<mx:Style>
    		.MenuStyle
    		{
    			fontSize : 14;
    		}
    	</mx:Style>
    	
    	<mx:Script>
    		<![CDATA[
    			import mx.events.MenuEvent;
    			// 导入 Menu 类
    			import mx.controls.Menu;
    			
    			// 创建一个 Menu 控件
    			private function createAndShow():void 
    			{
    				var myMenu:Menu = Menu.createMenu(null, myMenuData, false);
    				myMenu.labelField="@label";
    				myMenu.styleName = "MenuStyle";
    				// 添加事件
    				myMenu.addEventListener(MenuEvent.ITEM_CLICK, itemClickInfo);
    				myMenu.show(myButton.x + myButton.width, myButton.y + myButton.height);
    			}
    			
    			// 菜单事件方法
    			private function itemClickInfo(event:MenuEvent):void 
    			{
    				ta1.text="event.type: " + event.type;
    				ta1.text+="\nevent.index: " + event.index;
    				ta1.text+="\nItem label: " + event.item.@label
    				ta1.text+="\nItem selected: " + event.item.@toggled;
    				ta1.text+= "\nItem type: " + event.item.@type;
    			}
    		]]>
    	</mx:Script>
    	
    	<!-- 定义菜单数据 -->
    	<mx:XML format="e4x" id="myMenuData">
    		<root>
    			<menuitem label="菜单 A" >
    				<menuitem label="子菜单 A-1" enabled="false"/>
    				<menuitem label="子菜单 A-2"/>
    			</menuitem>
    			<menuitem label="菜单 B" type="check" toggled="true"/>
    			<menuitem label="菜单 C" type="check" toggled="false"/>
    			<menuitem type="separator"/>
    			<menuitem label="菜单 D" >
    				<menuitem label="子菜单 D-1" type="radio" groupName="one"/>
    				<menuitem label="子菜单 D-2" type="radio" groupName="one" toggled="true"/>
    				<menuitem label="子菜单 D-3" type="radio" groupName="one"/>
    			</menuitem>
    		</root>
    	</mx:XML>
    
    	<mx:Button id="myButton" label="打开菜单" fontSize="14" 
    		click="createAndShow();" x="31" y="27"/>
    	
    	<mx:TextArea x="31" y="82" fontSize="12" width="200" height="100" id="ta1"/>
    
    </mx:Application>
    

    二、 菜单条
    菜单条是一个显示顶级菜单项的横向条目。单击每个顶级菜单都会弹出一个子菜单。菜单条是继承了Menu类,所以,具有和Menu控件同样的事件。

    2.1 使用MenuBar控件创建菜单
    菜单条的设计要依赖于MenuBar控件,这个是在Flex中已经提供了。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	<mx:MenuBar id="myMenuBar" labelField="@label" fontSize="14">
    		<mx:XMLList>
    			<menuitem label="菜单 A" >
    				<menuitem label="子菜单 A-1" enabled="false"/>
    				<menuitem label="子菜单 A-2"/>
    			</menuitem>
    			<menuitem label="菜单 B" type="check" toggled="true"/>
    			<menuitem label="菜单 C" type="check" toggled="false"/>
    			<menuitem type="separator"/>
    			<menuitem label="菜单 D" >
    				<menuitem label="子菜单 D-1" type="radio" groupName="one"/>
    				<menuitem label="子菜单 D-2" type="radio" groupName="one" toggled="true"/>
    				<menuitem label="子菜单 D-3" type="radio" groupName="one"/>
    			</menuitem>
    		</mx:XMLList>
    	</mx:MenuBar>
    
    </mx:Application>

    2.2 菜单事件
    由于MenuBar控件是继承自Menu类的,所以具有Menu类的所有事件特性。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    
    	<mx:Script>
    		<![CDATA[
    			import mx.controls.Alert;
    			import mx.events.MenuEvent;
    			
    			// MenuBar 控件的 change 事件.
    			private function changeHandler(event:MenuEvent):void 
    			{
    				// 获取选中项目的 label 属性
    				if (event.menu != null) 
    				{
    					Alert.show("Label: " + event.item.@label);
    				}
    			}
    			
    			// MenuBar 控件的 itemRollOver 事件.
    			private function rollOverHandler(event:MenuEvent):void 
    			{
    				rollOverTextArea.text = "type: " + event.type + "\n";
    				rollOverTextArea.text += "target menuBarIndex: " +
    				event.index + "\n";
    			}
    			
    			// MenuBar 控件的 itemClick 事件.
    			private function itemClickHandler(event:MenuEvent):void 
    			{
    				itemClickTextArea.text = "type: " + event.type + "\n";
    				itemClickTextArea.text += "target menuBarIndex: " +
    				event.index + "\n";
    			}
    		]]>
    	</mx:Script>
    
    	<mx:MenuBar id="myMenuBar" labelField="@label" fontSize="14"
    		change="changeHandler(event);" itemClick="itemClickHandler(event);"
    		itemRollOver="rollOverHandler(event);">
    		<mx:XMLList>
    			<menuitem label="菜单 A" >
    				<menuitem label="子菜单 A-1" enabled="false"/>
    				<menuitem label="子菜单 A-2"/>
    			</menuitem>
    			<menuitem label="菜单 B" type="check" toggled="true"/>
    			<menuitem label="菜单 C" type="check" toggled="false"/>
    			<menuitem type="separator"/>
    			<menuitem label="菜单 D" >
    				<menuitem label="子菜单 D-1" type="radio" groupName="one"/>
    				<menuitem label="子菜单 D-2" type="radio" groupName="one" toggled="true"/>
    				<menuitem label="子菜单 D-3" type="radio" groupName="one"/>
    			</menuitem>
    		</mx:XMLList>
    	</mx:MenuBar>
    	
    	<mx:TextArea id="rollOverTextArea" width="200" height="100" x="10" y="64"/>
    	<mx:TextArea id="itemClickTextArea" width="200" height="100" x="218" y="64"/>
    
    </mx:Application>

    三、 弹出式按钮菜单的设计
    弹出式按钮菜单是一个以按钮的形式弹出的菜单。当用户单击按钮时,会弹出一个顶级的菜单项。与菜单和菜单条不同,弹出式按钮菜单只支持顶级菜单。

    3.1 使用PopUpMenuButton控件创建菜单
    要设计一个弹出式按钮菜单,需要使用Flex中提供的PopUpMenuButton控件。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	<mx:Script>
    		<![CDATA[	
    			// 菜单数据
    			[Bindable]
    			public var menuDP:Array = 
    			[
    				{label: "收件箱", data: "inbox"},
    				{label: "日历", data: "calendar"},
    				{label: "发件箱", data: "sent"},
    				{label: "已删除邮件", data: "deleted"},
    				{label: "垃圾邮件", data: "spam"}
    			];
    		]]>
    	</mx:Script>
    	<mx:PopUpMenuButton id="p1"
    		showRoot="true"
    		dataProvider="{menuDP}"
    		fontSize="14"
    	 x="33" y="31"/>
    </mx:Application>
    


    3.2 菜单事件
    PopUpMenuButton是PopUpButton控件的子类,所以,PopUpMenuButton控件支持PopUpButton控件的所有事件。

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	<mx:Script>
    		<![CDATA[
    			import mx.events.*;
    			import mx.controls.*;
    			
    			// 初始化数据
    			private function initData():void 
    			{
    				Menu(p1.popUp).selectedIndex = 3;
    			}
    			
    			// itemClick 事件
    			// 获取 label 和 data 属性的值,
    			// 获取索引 index
    			public function itemClickHandler(event:MenuEvent):void 
    			{
    				Alert.show("itemClick event label: " + event.label
    							+ " \nindex: " + event.index
    							+ " \nitem.label: " + event.item.label
    							+ " \nitem.data: " + event.item.data);
    			}
    			
    			// 单击事件
    			public function clickHandler(event:MouseEvent):void 
    			{
    				Alert.show(" Click Event currentTarget.label: "
    				+ event.currentTarget.label);
    			}
    			
    			// 菜单数据
    			[Bindable]
    			public var menuDP:Array = 
    			[
    				{label: "收件箱", data: "inbox"},
    				{label: "日历", data: "calendar"},
    				{label: "发件箱", data: "sent"},
    				{label: "已删除邮件", data: "deleted"},
    				{label: "垃圾邮件", data: "spam"}
    			];
    		]]>
    	</mx:Script>
    	<mx:PopUpMenuButton id="p1"
    		showRoot="true"
    		dataProvider="{menuDP}"
    		click="clickHandler(event)"
    		itemClick="itemClickHandler(event);"
    		fontSize="14"
    	/>
    </mx:Application>
    


     

  • 相关阅读:
    远程连接mysql数据库注意点记录
    一个支持chrome、firefox的全屏插件
    Windows Phone应用程序Tombstone执行模型总结
    Windows Phone页面导航和独立存储开发总结
    【讨论帖】控制分布式缓存“及时”过期的一种实现
    Java HashMap的死循环的启示
    You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5 SP1
    Analysis Service Tabular Model #003 Multidimensional Model VS Tabular Model 我们该如何选择?
    Analysis Service Tabular Model #002 Analysis services 的结构:一种产品 两个模型
    基于DotNet构件技术的企业级敏捷软件开发平台 AgileEAS.NET 4.0 最新发布版本 下载使用说明
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637543.html
Copyright © 2020-2023  润新知