自定义Flex Panel
做过很多 B/S、C/S架构的项目,关于B/S架构下的RIA 做过一些,但绝大多数都是自己做框架,如根据参数为页面返回2D图形、为图形加监听、为Grid建立排序等,成熟RIA框架用的不多,公司近期为国外开发一个网络探索工具,需要用到FLEX,FLEX技术以前项目中用到过,一般在项目占很少比例,像这次全部采用FLEX是第一次遇到,本人在开发中遇到一个小问题,就是重写PANEL控件以求达到更改PANEL外观的目的,发现网络上许多同仁都是介绍该如何更改样式,而没有达到重写的目地,同时发现网络上关于此的文章极少,现将自己的方式贴出,希望能对大家有所帮助。
现将重写PANEL的简单步骤列出,最后做代码汇总:
1. 重写一个组件,最好的方式就是继承现有组件
public class define_panel extends Panel
{
}
2. 需要重写panel 组件的3个方法,
updateDsiplayList();
createChildren(); //此方法内可添加一些组件,放入自定义PANEL中
layoutChrom(); //组件的布局指定
layoutChrom 方法在初次渲染及其事件中会多次调用
3. rowChildren.addChildren方法可以将组件添加到容器中来,但子组件应该设置相对与父容器的X、Y坐标,以求更好的显示效果。
4. 本文的思路大体上就是继承PANEL,创建Canvas,这个Canvas上可以添加各种组件(当然你也可以绘制各种图形做成组件),用我们定义的这个Canvas去覆盖PANEL 的title部分。
5. 全部代码如下
define_panel.as
package custom_commpont
{
import flash.events.MouseEvent;
import mx.containers.Canvas;
import mx.containers.Panel;
import mx.controls.Button;
import mx.controls.Image;
import mx.core.*;
import mx.effects.Resize;
import mx.effects.easing.Bounce;
import mx.styles.*;
public class define_panel extends Panel
{
public var btn:Button;
public var can:Canvas;
public var resize:Resize=new Resize();
[Embed(source="../resources/img/defpanel_backimg.jpg")]
private var backgroup_img:Class;
[Embed(source="bulletCheck.png")]
private var ion:Class;
private var iimg:Image=new Image();
//private var img:Image=Image(backgroup_img);
public function define_panel()
{
super();
resize.heightTo=this.height;
resize.easingFunction=Bounce.easeOut;
}
/**
* override updateDisplayList method
*/
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
titleBar.visible = true;
}
override protected function createChildren():void
{
iimg.source="http://blog.minidx.com/ext02/image2.jpg";
super.createChildren();
can=new Canvas();
can.width=this.width;
can.height=36;
can.toolTip="canvas";
can.setStyle("backgroundColor","blue");
can.setStyle("backgroundAlpha","0.31");
// can.setStyle("backgroundImage","resources/img/defpanel_backimg.jpg");
btn=new Button();
btn.label="最大化/最小化";
btn.width=18;
btn.height=12;
btn.addEventListener(MouseEvent.CLICK,resize_panel);
can.addChild(btn);
// can.addChild(btn1);
this.addChild(iimg);
super.titleIcon=ion;
this.rawChildren.addChild(can);
}
protected override function layoutChrome(unscaledWidth: Number, unscaledHeight:Number):void {
//trace("++1");
super.layoutChrome(unscaledWidth,unscaledHeight);
btn.move(can.width-35,10);
// btn1.move(can.width-btn.width-45,10);
can.move(0,0);
}
private function resize_panel(evt:MouseEvent):void{
resize.heightTo=resize.heightTo==this.titleBar.height?400:this.titleBar.height;
// trace(( resize.heightTo=resize.heightTo==this.titleBar.height?300:this.titleBar.height));
resize.duration=1000;
resize.easingFunction = resize.easingFunction==Bounce.easeOut?Bounce.easeIn:Bounce.easeOut;
resize.target=this;
resize.play();
}
}
}
definepanel.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns="custom_commpont.*">
<ns:define_panel width="400" height="400" id="defpanel" title="自定义PANEL" fontSize="18" x="398" y="193">
</ns:define_panel>
</mx:Application>
分享到:
相关推荐
flex自定义桌面panel,可放大缩小,不会超出桌面大小
6. **自定义标题栏**:虽然Flex Panel默认带有一个标题栏,但可以根据需要自定义其样式和功能。例如,可以添加图标、更改文字颜色,甚至添加额外的按钮。 7. **布局管理**:Flex Panel内部支持多种布局管理器,如`...
原生的Panel组件默认并未内置最小化和最大化功能,用户需要自定义这些功能。这个修改版则解决了这个问题,通过扩展Panel类并覆盖其原有方法,实现了这些功能。 最小化功能允许用户将面板缩小到标题栏大小,仅显示...
在Flex开发中,"Flex可以拖拽的panel"是一个重要的功能点,它允许用户通过鼠标操作将面板(Panel)在界面上自由移动,提升用户体验,尤其是对于需要自定义布局的应用程序来说,这种交互方式非常实用。下面我们将深入...
10. 自定义组件:如果Flex的标准组件无法满足需求,可以自定义组件来扩展其功能。这可能涉及到继承现有的组件类并重写或添加方法,或者创建全新的组件类。 总之,“flex特效拖动Panel变Window”是一个结合了Flex...
在Flex编程领域,Panel是一种常用的组件,用于组织和展示用户界面元素。标题“带放大缩小的Panel”暗示我们将探讨如何为Flex中的Panel组件添加缩放功能。这在创建可交互和响应用户操作的富互联网应用程序(RIA)时...
可以创建一个自定义的FloatingPanel类,继承自Flex的Panel类,并在其中封装上述功能。 综上所述,实现“Flex超炫悬浮面板”需要掌握ActionScript编程,理解Flex组件和事件处理机制,以及熟悉CSS样式定制。通过精心...
在Flex中,我们可以利用各种组件如Accordion、AccordionItem或自定义的CollapsiblePanel来实现折叠效果。 1. **Accordion组件**:Accordion是Flex提供的一种内置组件,它可以包含多个AccordionItem,每个Item都可以...
8. **自定义组件**:如果Flex的标准组件无法满足果冻特效的需求,开发者可以创建自定义组件,继承自现有组件并扩展其功能,以实现特定的果冻效果。 在"guodong"这个压缩包文件中,可能包含了实现Flex果冻特效的源...
Panel组件在Flex中提供了丰富的自定义可能性,包括外观、交互以及视觉效果。本话题将深入探讨“flex中paner的特效”,我们将讨论如何利用CSS、皮肤和ActionScript来实现Panel的各种特效。 首先,`flekristal.css` ...
总结来说,通过自定义ComboBox的下拉列表组件和渲染器,以及创建具有移动和调整大小功能的Panel,我们可以实现Flex中的ComboBox下拉列表中带有Checkbox的功能。这使得用户能够在下拉列表中进行多选操作,同时保持了...
#### 四、自定义Flex动画效果 除了使用内置的效果外,Flex还支持用户自定义动画效果。自定义动画通常涉及到更高级的编程技巧,允许开发者创建独特的动画体验。自定义动画可以通过继承Flex的`Effect`类或使用`Tween`...
自定义事件则允许开发者根据具体需求创建特定类型的事件来扩展Flex的应用能力。 在Flex中,事件模型基于DOM3事件模型。这意味着事件的传播遵循了一套固定的规则,包括事件的捕获、目标和上浮三个阶段。这些规则使得...
1. **容器组件**:FlexMDI中的核心容器是MDIContainer,它是Flex标准Panel组件的扩展。MDIContainer作为所有子窗口的容器,能够管理和布局这些子窗口。 2. **子窗口创建**:创建子窗口时,你需要继承FlexMDI提供的...
在Flex中,PopupManager类负责管理这些弹出窗口,而动画效果则可以通过添加自定义的打开和关闭动画来增强用户体验。开发者可能通过改变Popup的大小、位置,甚至添加旋转等变换来实现各种炫酷的弹出效果。 总的来说...
总的来说,实现Flex开关门效果需要理解Flex的基本架构,熟练运用组件、动画和事件处理,并可能需要一些自定义组件的知识。通过不断实践和学习,可以创造出更多富有创意和吸引力的视觉效果,提升用户体验。
Flex提供了许多预定义的组件,如Button、Canvas、Panel等,这些组件可以自定义样式和行为。对于翻页效果,我们可能需要创建一个自定义组件,模拟书页的外观和动作。这个组件可能包含两个主要部分:左页和右页,可以...
自定义组件可以通过扩展基础组件(如Canvas或Panel)并重写其方法和属性来实现。 3. **图形与连线**:“连线”是拓扑图的关键部分,Flex提供了图形绘制和交互的能力。可以使用Spark或MX图形组件,如Line或Shape,来...