flex4中实现类似javascript中window.prompt的效果

javascript中有这么一个功能,弹出来一个对话框,允许输入文字内容,点击对话框的“确定”按钮,关闭对话框,并且把值传递过去。

我参考了这篇文章:http://adyhpq.blog.163.com/blog/static/3866700200822073252221/

不过我实现的方式不同,我是在点击“确定”按钮的时候,生成一个自定义事件,然后再监控这个事件,下面是代码部分:

 

先建立了一个MXML组件,继承的是TitleWindow类:

 

<?xml version="1.0" encoding="utf-8"?>
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" width="320" height="136" dropShadowVisible="false" keyDown="titlewindow1_keyDownHandler(event)" creationComplete="titlewindow1_creationCompleteHandler(event)">
	<s:layout>
		<s:BasicLayout/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import mx.events.CloseEvent;
			import mx.events.FlexEvent;
			import mx.managers.PopUpManager;
			
			import spark.components.Application;
			
			public static const PROMPT_OK:String = "ok";
			
			public var msg:String = "";
			public var text:String = "";
					

			protected function ok_clickHandler(event:MouseEvent):void	// 确定按钮点击时执行
			{
				text = textInput.text;
				dispatchEvent(new Event(PromptWindow.PROMPT_OK));
				PopUpManager.removePopUp(this);
			}
			
			protected function cancel_clickHandler(event:MouseEvent):void	// 取消按钮点击时执行
			{
				PopUpManager.removePopUp(this);
			}
			
			protected function titlewindow1_keyDownHandler(event:KeyboardEvent):void	//按键Esc时执行
			{
				if(event.keyCode == Keyboard.ESCAPE)
				{
					PopUpManager.removePopUp(this);
				}
			}
			
			//弹出prompt对话框,第1个参数是指窗体对象,第2个参数是指默认显示标题内容,第3个参数是指默认显示文字内容,第4个参数是指默认显示输入框里内容
			public static function prompt(win:*,defaultTitle:String="",defaultMsg:String="",defaultText:String=""):PromptWindow	
			{
				var promptWindow:PromptWindow = new PromptWindow();
				promptWindow.x = 100;
				promptWindow.y = 150;
				promptWindow.title = defaultTitle;
				promptWindow.msg = defaultMsg;
				promptWindow.text = defaultText;
				promptWindow.addEventListener(CloseEvent.CLOSE,function(e:CloseEvent):void{
					PopUpManager.removePopUp(promptWindow);
				});
				PopUpManager.addPopUp(promptWindow,win,true);
				
				return promptWindow;
			}


			protected function titlewindow1_creationCompleteHandler(event:FlexEvent):void
			{
				this.title = title;
				msgLabel.text = msg;
				textInput.text = text;
			}

		]]>
	</fx:Script>
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<s:Label x="48" y="10" width="234" id="msgLabel"/>
	<s:TextInput x="49" y="36" width="232" id="textInput"/>
	<s:controlBarContent>
		<s:Button x="83" y="72" label="确定" click="ok_clickHandler(event)"/>
		<s:Button x="186" y="72" label="取消" click="cancel_clickHandler(event)"/>	
	</s:controlBarContent>
	<s:controlBarLayout>
		<s:HorizontalLayout paddingTop="6" paddingBottom="6" paddingRight="6" horizontalAlign="right" verticalAlign="middle" />
	</s:controlBarLayout>
</s:TitleWindow>

 

 

 

下面可以在Flex程序中调用这个组件:

var prompt:PromptWindow = PromptWindow.prompt(this,"title","msg","text");			
prompt.addEventListener(PromptWindow.PROMPT_OK,function():void{
	Alert.show(prompt.text);
});
posted @ 2010-12-15 21:14  魔豆  阅读(1455)  评论(0编辑  收藏  举报