`
nianshi
  • 浏览: 419074 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Flex:在PANEL的title上加一个button

    博客分类:
  • Flex
阅读更多

在 panel的titleBar上添加按钮,首先 override createChildren方法, 其中加入panel.rawChildren.addChild(Button),然后override panel的layoutChrome方法定置按钮的位置。
例子如下:

001 package{

002     import mx.containers.Panel;

003     import mx.controls.Button;

004     import flash.events.Event;

005     import flash.events.MouseEvent;

006     import flash.display.DisplayObject;

007     import mx.effects.Resize;

008     import mx.controls.Alert;

009     import mx.controls.Label;

010   

011     [Event(name="restore")]

012     [Event(name="maximize")]

013   

014     public class FlexPanel extends Panel{

015         private var state:int = 0;

016               

017         private var restoreBtn: Button;

018         private var minBtn: Button;

019         private var closeBtn: Button;

020          

021         [Embed("../assets/minICON.png")] // 这里我自定义了按钮外观

022         private var minIcon:Class;

023         [Embed("../assets/minOverICON.png")]

024         private var minOverIcon:Class;

025          

026         [Embed("../assets/restoreICON.png")]

027         private var restoreIcon:Class;

028         [Embed("../assets/restoreOverICON.png")]

029         private var restoreOverIcon:Class;

030          

031         [Embed("../assets/closeICON.png")]

032         private var closeIcon:Class;

033         [Embed("../assets/closeOverICON.png")]

034         private var closeOverIcon:Class;

035          

036         private var resize: Resize;     

037         private var effectTime: Number = 400;

038            

039         private static var _instance: FlexPanel;

040          

041         public function FlexPanel(){

042             super();

043             _instance = this;  

044         }

045          

046         public override function initialize():void{

047             super.initialize();

048             this.maxHeight = this.height;

049             initEffect();

050         }

051          

052         private function setState(state:int):void{

053             this.state=state;

054             if (state==0){

055                 this.dispatchEvent(new Event('restore'));

056             } else {

057                 this.dispatchEvent(new Event('maximize'));

058             }

059         }

060         /* ************************************************* */

061         protected override function createChildren(): void {

062             super.createChildren();

063             

064             this.titleBar.addEventListener(MouseEvent.MOUSE_DOWN, doDrag);

065             this.titleBar.addEventListener(MouseEvent.MOUSE_UP, doDrop);

066             

067             restoreBtn = new Button();

068             restoreBtn.addEventListener("click",doRestore);        

069             restoreBtn.setStyle("overIcon",restoreOverIcon);

070             restoreBtn.setStyle("downIcon",restoreIcon);

071             restoreBtn.setStyle("upIcon",restoreIcon);        

072             restoreBtn.visible=false;

073             rawChildren.addChild(restoreBtn);  

074             

075             minBtn = new Button();

076             minBtn.addEventListener("click",doMin);

077             minBtn.setStyle("overIcon",minOverIcon);

078             minBtn.setStyle("downIcon",minIcon);

079             minBtn.setStyle("upIcon",minIcon);

080             minBtn.visible = true;

081             rawChildren.addChild(minBtn);

082             

083             closeBtn = new Button();

084             closeBtn.addEventListener("click",doClose);

085             closeBtn.setStyle("overIcon",closeOverIcon);

086             closeBtn.setStyle("downIcon",closeIcon);

087             closeBtn.setStyle("upIcon",closeIcon);

088             closeBtn.visible = true;

089             rawChildren.addChild(closeBtn);        

090             

091         }

092         /* ************************************************** */

093         protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{

094             super.updateDisplayList(unscaledWidth, unscaledHeight);            

095         }

096          

097         private function doMin(event:Event):void{

098             setState(1);

099             minBtn.visible= false;

100             restoreBtn.visible= true;

101             minEffect();

102             //Alert.show(this.verticalScrollBar.toString());

103         }

104           

105         private function doRestore(event:Event) :void{

106             setState(0);

107             minBtn.visible= true;

108             restoreBtn.visible= false;

109             restoreEffect();

110         }

111          

112         private function doClose(event:Event) :void{

113             this.visible = false;

114             this.parent.removeChild(this);

115         }

116          

117         private function doDrag(event:Event):void{

118             this.startDrag();        

119         }

120          

121         private function doDrop(event:Event):void{

122             this.stopDrag();        

123         }

124         /* ********************************************************************************* */

125         protected override function layoutChrome(unscaledWidth: Number, unscaledHeight:Number):void {

126             super.layoutChrome(unscaledWidth, unscaledHeight);

127             

128             var margin:int = 0;

129             var pixelsFromTop:int = 6;

130             var pixelsFromRight:int = 12;

131             var buttonWidth:int = 18;

132             var buttonHeight:int = 17;

133             var distance:int = 7;

134             var x:Number = this.width - buttonWidth*2 - distance - pixelsFromRight;

135             var y:Number = pixelsFromTop;

136             

137             restoreBtn.setActualSize(buttonWidth, buttonHeight);

138             restoreBtn.move(x,y);

139             

140             minBtn.setActualSize(buttonWidth, buttonHeight);

141             minBtn.move(x,y);

142             

143             closeBtn.setActualSize(buttonWidth, buttonHeight);

144             closeBtn.move(this.width - buttonWidth - pixelsFromRight,y);

145             

146         }

147         /* ********************************************************************************* */

148         private function initEffect():void{        

149             resize = new Resize(_instance);

150             resize.heightTo = this.titleBar.height;

151             resize.duration = effectTime;

152         }

153          

154         private function minEffect():void{

155             resize.heightTo = this.titleBar.height;

156             resize.end();

157             resize.play();

158         }

159          

160         private function restoreEffect():void{

161             resize.heightTo = this.maxHeight;

162             resize.end();

163             resize.play();

164         }

165     }

166 }

看到这么长的代码不要觉得可怕,这是我自己用的panel,懒得简化了干脆直接把代码全帖出来,你只需要注意开带*号的地方就可以了

分享到:
评论

相关推荐

    Flex:事件的流转控制.doc

    1. **仅响应Panel事件**:在`Panel`内部的`Button`上添加了事件处理器`buttonClickHandler`,并通过`useCapture=true`设置在捕获阶段监听事件。因此,点击按钮时,`Panel`的事件处理器将被执行,而按钮自身的处理器...

    flex quick starts

    这段代码将在按钮上设置工具提示,当鼠标悬停在按钮上时,会显示“这是一个示例按钮”。 **2. 处理换行** 如果工具提示的文本过长,可以通过添加`\n`(ActionScript中)或`
`(MXML中)来实现换行。例如: ``...

    Flex 延迟加载 问题说明 处理 实现

    在Flex框架中,延迟加载主要应用于组件的渲染和资源的加载上。例如,当一个Flex应用程序包含大量组件时,如果所有组件都在启动时加载并渲染,这将大大增加初始加载时间。通过采用延迟加载技术,可以让不立即可见或...

    flex与ajax交互、flex与javascript交互.docx

    下面的示例展示了如何在一个简单的Flex应用中使用Flex-AjaxBridge技术与JavaScript进行交互。 ##### Flex端代码(main.mxml): ```xml <mx:Application xmlns:mx=...

    Extjs4 Grid分页与自动刷新

    { text: '标题', dataIndex: 'title', flex: 2 }, { text: '发布时间', dataIndex: 'posttime', flex: 1 } ], dockedItems: [ // 定义停靠项 { xtype: 'pagingtoolbar', // 分页工具栏 store: store, // 绑定...

    Flex 3 控件实例全部

    在 Flex 3 中,你可以通过调用静态方法 `Alert.show()` 来显示一个 `Alert` 对话框。例如: ```xml <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> <![CDATA[ import mx.controls....

    Flex3 界面布局教程

    Canvas 是 Flex 中一个非常基础且重要的布局容器,它允许开发者通过精确控制子元素的位置来构建界面。Canvas 容器本身定义了一个矩形区域,可以在此区域内放置其他容器或控件。与大多数其他容器不同,Canvas 不会...

    grails和flex的集成手册

    <mx:Panel layout="vertical" title="Enter Customer Information"> <mx:Form backgroundColor="white"> <mx:FormItem label="First Name"> <mx:TextInput id="firstName" width="150"/> </mx:FormItem> <mx:Form...

    extjs初学控件

    以上代码创建了一个包含三列(Name, Email, Phone)的Grid,并将其渲染到页面上。 在学习ExtJS控件时,理解这些基本组件的使用方法至关重要,因为它们构成了构建复杂应用的基础。无论是弹框用于用户交互,还是表格...

    Flex_4_界面设计实战

    下面将逐步介绍如何在Flex环境中创建一个基本的登录界面。 **步骤 1:创建Flex项目** 1. 打开开发工具(例如Adobe Flash Builder),选择“文件” → “新建” → “Flex项目”命令。 2. 在出现的“新建Flex项目”...

    Flex UI组件使用全集

    本文档是基于阿树对Adobe Flex UI组件库的全面整理,并结合Adobe主页上提供的各种组件代码示例进行深度解析。Flex是一种用于构建高度交互式的Web应用的框架,尤其适用于创建丰富的互联网应用程序(RIA)。它包含了一...

    关于应用容器(Application Container)

    - 在Flex中,应用容器通过`<mx:Application>`标记进行定义,该标记必须是MXML文件的第一个标记。 - `<mx:Application>`不仅充当容器的角色,还作为该文件中所有ActionScript代码的默认作用域,并定义了应用程序的...

    Flex使用视图状态(View States)笔记

    例如,在一个相册应用中,当用户鼠标悬停在一张图片上时,系统可以显示与该图片相关的信息(如拍摄时间、地点等),而当鼠标移开时,这些额外信息消失,仅保留图片本身。这就是视图状态的一个典型应用场景。 #### ...

    老师整理的extjs学习笔记

    2. **GitHub**: ExtJS 的源代码也托管在 GitHub 上,可以通过访问其仓库获取最新版本。 示例引用代码: ```html <script type="text/javascript" src="path/to/ext-all-debug.js"></script> ``` **1.2 典型的 ...

Global site tag (gtag.js) - Google Analytics