flex---->菜单设计

本文介绍了在Flex中设计菜单的方法,包括上下文菜单、菜单条及弹出式按钮菜单。详细讲解了如何使用Menu、MenuBar及PopUpMenuButton控件创建各种菜单,并添加事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 菜单设计

菜单主要的作用就是功能模块的导航,通过菜单,用户可以快速的切换到需要的功能。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>


 

``` <template> <lay-layout class="home-class"> <lay-header> <lay-logo class="logo">工单管理系统</lay-logo> <lay-switch v-model="collapse"></lay-switch> <lay-switch v-model="active20"></lay-switch> <lay-dropdown> <lay-button type="text" icon="layui-icon-user"></lay-button> <template #content> <lay-dropdown-menu> <lay-dropdown-menu-item>个人中心</lay-dropdown-menu-item> <lay-dropdown-menu-item divided>退出登录</lay-dropdown-menu-item> </lay-dropdown-menu> </template> </lay-dropdown> </lay-header> <lay-layout class="flex-container"> <!-- 侧边菜单 --> <lay-side> <lay-menu :collapse="collapse" :tree="isTree" :theme="active20 ? 'dark' : 'light'" :selected-key="selectedKey" :open-keys="openKey" @changeSelectedKey="changeSelectedKey"> <lay-menu-item id="/"> <template #icon> <lay-icon type="layui-icon-home"></lay-icon> </template> <template #title> 首页 </template> </lay-menu-item> <lay-sub-menu id="/processUsage"> <template #icon> <lay-icon type="layui-icon-template"></lay-icon> </template> <template #title> 流程使用 </template> <lay-menu-item id="/apply">工单申请</lay-menu-item> <lay-menu-item id="/draft">草稿箱</lay-menu-item> <lay-menu-item id="/todo">待办事项</lay-menu-item> </lay-sub-menu> <lay-sub-menu title="流程查询" is="queryProcess"> <template #icon> <lay-icon type="layui-icon-search"></lay-icon> </template> <template #title> 流程查询 </template> <lay-menu-item id="/query">工单查询</lay-menu-item> <lay-menu-item id="/my-process">我的发起</lay-menu-item> <lay-menu-item id="/processed">已处理工单</lay-menu-item> </lay-sub-menu> <lay-sub-menu title="系统管理" v-if="isAdmin" id="/system"> <template #icon> <lay-icon type="layui-icon-set"></lay-icon> </template> <template #title> 系统管理 </template> <lay-menu-item id="/permission">权限管理</lay-menu-item> <lay-menu-item id="/workflow">流程配置</lay-menu-item> </lay-sub-menu> </lay-menu> </lay-side> <!-- 主体内容 --> <lay-body style="padding: 20px"> <!-- 面包屑 --> <GlobalBreadcrumb></GlobalBreadcrumb> <router-view /> </lay-body> </lay-layout> </lay-layout> </template> <script setup> import { ref } from 'vue'; import GlobalBreadcrumb from '../components/global/GlobalBreadcrumb.vue'; const isAdmin = ref(true); const collapse = ref(false); const active20 = ref(false); const selectedKey = ref("/") const openKey = ref(["/"]) const isTree = ref(true) </script>```lay-header 怎么设置logo在左边
03-12
<template> <div class="common-layout"> <el-container class="layout-container"> <!-- 头部 --> <el-header class="header"> <span class="title">AI教学管理系统</span> <div class="tools"> <a href=""> <el-icon><User /></el-icon> 修改密码 </a> <a href=""> <el-icon><SwitchButton /></el-icon> 退出登录 </a> </div> </el-header> <el-container class="main-container"> <!-- 侧边栏 --> <el-aside class="aside"> <!-- 使用 el-scrollbar 包裹菜单 --> <el-scrollbar class="menu-scrollbar"> <el-menu router default-active="1" class="side-menu" background-color="#2c3e50" text-color="#ecf0f1" active-text-color="#f39c12" > <!-- 首页 --> <el-menu-item index="/index"> <el-icon><Menu /></el-icon> <span>首页</span> </el-menu-item> <!-- 班级学员管理子菜单 --> <el-sub-menu index="2" class="menu-group"> <template #title> <el-icon><Document /></el-icon> <span>班级学员管理</span> </template> <el-menu-item index="/stu">学员管理</el-menu-item> <el-menu-item index="/clazz">班级管理</el-menu-item> </el-sub-menu> <!-- 部门员工管理子菜单 --> <el-sub-menu index="3" class="menu-group"> <template #title> <el-icon><Avatar /></el-icon> <span>部门管理</span> </template> <el-menu-item index="/emp">员工管理</el-menu-item> <el-menu-item index="/dept">部门管理</el-menu-item> </el-sub-menu> <!-- 新增的统计管理子菜单 --> <el-sub-menu index="4" class="menu-group"> <template #title> <el-icon><PieChart /></el-icon> <span>统计管理</span> </template> <el-menu-item index="4-1">学员统计</el-menu-item> <el-menu-item index="4-2">部门统计</el-menu-item> </el-sub-menu> </el-menu> </el-scrollbar> </el-aside> <!-- 主内容区 --> <el-main class="main-content"> <router-view></router-view> </el-main> </el-container> </el-container> </div> </template> <script setup lang="ts"></script> HomeIndex.vue代码如下 <!-- 图片展示 --> <img src="@/assets/【哲风壁纸】rap-动感篮球元素.png" alt="" /> </template> <style scoped></style> 帮我调整一下首页图片样式,美化一下首页
最新发布
07-18
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值