`

自定义组件,仿panel 在左上角显示Button

    博客分类:
  • flex
阅读更多

在Panel右上方加Button:

(1)页面*.mxml文件:
<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
          xmlns:container="com.core.container.*">


<!-- 传统的Panel 右上方标题栏,不能加Button
 <s:Panel width="100%" height="50%" title="評估型KPI信息">
  <mx:DataGrid width="100%" height="100%" id="kpiList" selectedIndex="0"
      horizontalScrollPolicy="auto" verticalScrollPolicy="auto">
  </mx:DataGrid>
 </s:Panel>
 -->
 
<!-- 使用自定义组件,添加三个按钮,使用actionscript类构建三个Button-->
 <container:MoreButtonPanel title="評估型KPI信息" width="100%" height="50%" layout="horizontal" stateHost="{this}" id="morePanel">
  <mx:DataGrid width="100%" height="100%" id="kpiList" selectedIndex="0"
      horizontalScrollPolicy="auto" verticalScrollPolicy="auto">
  </mx:DataGrid>
 </container:MoreButtonPanel>

<fx:Script>
 //三个Button一起创建,不能识别,使用btn.addEventListener(MouseEvent.CLICK,function(){ Alert.show('11');});
 /*public function buttonHandler(type:String):void{
    Alert.show('btn');
   }
 */
 
 可以在MoreButtonPanel.as中的回调函数传个event参数,这样可以识别点击了哪个按钮。
 public function buttonHandler(type:String,obj:Object):void{

     Alert.show(obj.toString()+"----");
     Alert.show(obj.id+"--"+obj.label);
   }

</fx:Script>

</s:TitleWindow>

(2) 上面需要使用的com.core.container.MoreButtonPanel.as文件:

package com.core.container
{
 import flash.events.MouseEvent;
 
 import mx.containers.Panel;
 import mx.controls.Button;
 
 public class MoreButtonPanel extends Panel
 {
  public var type:String;
  public var _mybtn:Button;
  public var _mybtn2:Button;
  public var _mybtn3:Button;
  public var stateHost:Object;
  
  public function MoreButtonPanel()
  {
   super();
  }
  
  protected override function createChildren(): void {   
   super.createChildren();  
   _mybtn = new Button();      
   _mybtn.height=20;        
   _mybtn.width=100;
   _mybtn.label = "PE 整體信息";
   _mybtn.id = "kpiBtn";
   _mybtn.addEventListener(MouseEvent.CLICK,buttonHandler);        
   this.rawChildren.addChild(_mybtn); 
   
   _mybtn2 = new Button();      
   _mybtn2.height=20;        
   _mybtn2.width=110;
   _mybtn2.label = "IPVPN Backbone";
   _mybtn2.id = "kpiBtn2";
   _mybtn2.addEventListener(MouseEvent.CLICK,buttonHandler);        
   this.rawChildren.addChild(_mybtn2);
   
   _mybtn3 = new Button();      
   _mybtn3.height=20;        
   _mybtn3.width=100;
   _mybtn3.label = "鏈路接口信息";
   _mybtn3.id = "kpiBtn3";
   _mybtn3.addEventListener(MouseEvent.CLICK,buttonHandler);        
   this.rawChildren.addChild(_mybtn3);
  }
  protected override function layoutChrome(unscaledWidth: Number, unscaledHeight:Number):void {
   super.layoutChrome(unscaledWidth, unscaledHeight);
   _mybtn.move(this.width-_mybtn.width-23,6);               //定位
   _mybtn2.move(this.width-_mybtn.width-_mybtn2.width-23-5,6);
   //_mybtn3.move(this.width-_mybtn.width-_mybtn2.width-_mybtn3.width-23-5*2,6);
   _mybtn3.move(this.width-_mybtn.width-23,6); 
  }
  private function buttonHandler(event:MouseEvent):void
  {
   if(stateHost.hasOwnProperty('buttonHandler')){
    (stateHost['buttonHandler'] as Function).call(stateHost['buttonHandler'],type);
   }
  }

 

  //可以传递event,如果多个按钮,根据event.target来判断点击哪个铵钮
  /*private function buttonHandler(event:MouseEvent):void
  {
   if(stateHost.hasOwnProperty('buttonHandler')){
    (stateHost['buttonHandler'] as Function).call(stateHost['buttonHandler'],type,event.target); //传递event的对象
   }
  }*/
 }
}

 

有一个问题,在页面上如何控制三个Button的位置?


 DisplayObject类及其子类中的localToGlobal () 方法和globalToLocal()方法:
 //Point将 point 对象从显示对象的(本地)坐标转换为舞台全局)坐标
     var p:Point=this.views.morePanel._mybtn.localToGlobal(new Point(this.views.morePanel._mybtn.x,this.views.morePanel._mybtn.y));

(3)Meditor:

 

给button增加事件的两种方法:


第一种:
//记录Type,控制三个铵钮的显示
    if(Type=="Avai"||Type=="Deli"){
     this.views.morePanel._mybtn3.visible = false;
     //this.views.morePanel._mybtn3.includeInLayout=false;
     this.views.morePanel._mybtn3.enabled=false;
     //增加事件
     this.views.morePanel._mybtn.addEventListener(MouseEvent.CLICK,function(){ Alert.show('11');});
     this.views.morePanel._mybtn2.addEventListener(MouseEvent.CLICK,function(){ Alert.show('123');});
    }
    else if(Type=="Late"){
     this.views.morePanel._mybtn.visible = false;
     //this.views.morePanel._mybtn.includeInLayout=false; 
     this.views.morePanel._mybtn.enabled=false;
     //增加事件
     this.views.morePanel._mybtn2.addEventListener(MouseEvent.CLICK,function(){ Alert.show('11');});
     this.views.morePanel._mybtn3.addEventListener(MouseEvent.CLICK,function(){ Alert.show('123');});
    }

第二种: 调用MoreButtonPanel.as中命名的回调函数buttonHandler()

--------------------------------------------------------------------------

if(groupVis.numChildren>0){         // 是否有子结点
  groupVis.removeAllChildren();
}

 <mx:FormItem label="分組" id="groupVis" includeInLayout="false" visible="false" />

 

 

----------------------------------------------------------------------------------------------------------------------------------

 

78.
[Bindable]
public var totalIndexArr:ArrayCollection=new ArrayCollection();

var cc:CheckBox=view.totalIndexArr[1];
  cc.selected=true;

if(grid.numChildren>0){
       grid.removeAllChildren();
      }
      var len:int=groupArr.length;
      var gridItem:GridItem;
      var gridRow:GridRow;
      var index:int=0;
      //grid.x=this.width/2;
      for(var k=0;k<len;k++){
       if (index%3 == 0)
       {
        gridRow = new GridRow();         //增加一行
        grid.addChild(gridRow);

       }
       index++;
       var c:CheckBox=new CheckBox();
       c.label=groupArr[k];
       //c.data=groupArr[k];
       //groupVis.addChild(c);
       c.height = 20;             //不设置height,width,将不显示
       c.width = 80;
       totalIndexArr.addItem(c);  //totalIndexArr 是一个ArrayCollection,它会绑定到gridRow里的checkbox
       gridItem = new GridItem();
       gridItem.addChild(c);
       gridRow.addChild(gridItem);
      }


http://hi.baidu.com/selina_1113/blog/item/589069050191f969020881d6.html


在数组(ArrayCollection)中使用[Bindable]标签时,无论是数组被替换还是数组中的元素改动,都会触发更新事件。

//选 中的数
  private function selectedNum():int{
   var totalCheckBox:ArrayCollection = view.totalIndexArr;
   var k:int=0;
     var num:int=totalCheckBox.length;
   for(var i:int=0;i<num;i++){
     var c:CheckBox=totalCheckBox[i];
    if(c.selected){
     k++;
     groupNames+=c.label+",";
    }
   }
   return k;
  }

 

74、flex布局是不考虑组件是否处于可视状态。也就是说不论组件是否可视,它都会在区域中占空间。但你可以通过includeInLayout设置组件是否参与布局。要注意的是includeInLayout只影响组件是否处于容器的布局中而不影响组件是否处于可视状态。

111、在List组件中,你可以把allowMultipleSelection设为true,这样用户按着ctrl键可以选择多个项。

112、List组件中的selectedIndices/selectedItems为被选中的序号和项,它们均为Vector对像。

 


 

分享到:
评论

相关推荐

    Flex可以拖拽的panel

    2. 计算偏移量:在mousedown事件中,记录下鼠标按下时相对于面板左上角的坐标作为偏移量。 3. 更新位置:在mousemove事件中,获取当前鼠标位置,结合偏移量计算出新的面板位置,并设置面板的x和y属性。 4. 阻止默认...

    java 应用GridLayout设计版面

    第一个组件位于左上角,然后按顺时针方向填充网格。 - **行和列的动态性**:如果添加的组件数量超过网格的行列数,`GridLayout`会自动扩展网格来适应这些组件。 4. **示例代码(参考GridLayoutDemo.java)** 下面...

    不用标题栏就可实现Delphi窗口拖动..rar

    3. **处理鼠标移动事件**:在OnMouseMove事件中,我们计算出鼠标当前相对于窗体左上角的新位置,并根据鼠标移动的距离来更新窗体的位置。 ```delphi procedure TForm1.FormMouseMove(Sender: TObject; Shift: ...

    Flex3界面布局中文教程--一路风尘制作

    **Absolute模式**下,组件的位置由`x`、`y`坐标决定,坐标原点位于Canvas容器的左上角。此模式下,组件位置的精确控制变得非常直观,但同时也意味着更多的手动调整工作。例如,如果设置了`&lt;mx:Button x="10" y="10" ...

    awt.rar_awt_java awt_java绘图

    在`paint`方法内,我们使用`Graphics`对象进行绘图,首先画了一条从(50, 50)到(200, 150)的红色线,然后填充了一个左上角坐标为(100, 100),宽高各为100的蓝色矩形。 AWT的绘图操作是直接在内存中的缓冲区上进行的...

    C#控件一览表-前所未有的震撼(太详细了).docx

    - **Left**和**Top**:设定窗体的左上角坐标。 - **ControlBox**:决定是否显示窗体标题栏的控制按钮。 - **MaximizeBox**和**MinimizeBox**:控制最大化和最小化按钮的显示。 - **AcceptButton**:指定Enter键...

    wxPython实现窗口用图片做背景

    这里的`(0, 0)`是图片在Panel上的位置,通常设置为(0, 0)使其从左上角开始。 接着,我们获取图片的宽度和高度,以便设置窗口大小以适应图片。`image_width = to_bmp_image.GetWidth()`和`image_height = to_bmp_...

    C#经典特效代码470例(PDF已经整理)

    - **实例说明**:在窗体中显示滚动的文字,常用于新闻或公告的显示。 - **技术要点**: - 使用`Timer`控件来控制文字的移动速度。 - 使用`Label`控件显示文字。 - 通过修改`Left`属性来实现文字的滚动。 **实例...

    wxpython+pymysql实现用户登陆功能

    4. **窗口图标设置**:为了使应用程序更具辨识度,开发者通常会在窗口的左上角设置图标。在wxPython中,可以通过`wx.Icon()`函数加载图片,并使用`frame.SetIcon(icon)`来设置窗口的图标。图片格式应适配系统要求,...

    04747 Java语言程序设计(一) 2013年1月

    `:绘制一个矩形,左上角坐标为(50, 50),宽50高100。 - `g.setColor(Color.RED);`:设置颜色为红色。 - `g.fillRect(50, 50, 50, 100);`:填充矩形。 **15. `sleep`和`wait`的区别** - **知识点概述**: - `...

    Axure学习笔记.doc

    - 图片或按钮左上角的黑白小方框可以预览效果,方便在设计过程中检查和调整。 10. **Axure的优势**: - 相比于纸笔、Word、PPT、Visio、Photoshop/Fireworks和Dreamweaver,Axure在原型设计上更加专业,提供了一...

Global site tag (gtag.js) - Google Analytics