zoukankan      html  css  js  c++  java
  • List容器间 拖放对象,Flex程序还真幸福啊!


    在FLex,List与List容器间,都已经 封装好了,只需要设置几个属性,就可以实现 ListItem 相互拖拽数据,非常方便啊

    想起 C#里不知要多少代码才能解决这些问题,尤其还要拖放排序。

    Flex程序还挺幸福的,事件都 dispatchEvent 解决了,呵呵。

    国际惯例,看图先:

     

    当然,还加了,相同小图标,窗口模式,操作模式就加了个 等待时候的钟摆,

     

    另外自定义 锁定 拖入,拖出功能。

    核心代码大概如此:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
              xmlns:s
    ="library://ns.adobe.com/flex/spark" 
              xmlns:mx
    ="library://ns.adobe.com/flex/mx" creationComplete="initApp()">
        <fx:Declarations>
            <!-- 将非可视元素(例如服务、值对象)放在此处 -->
        </fx:Declarations>
        
        <fx:Style>
            @namespace s "library://ns.adobe.com/flex/spark";
            s|ButtonBar s|ButtonBarButton:upAndSelected,
            s|ButtonBar s|ButtonBarButton:overAndSelected,
            s|ButtonBar s|ButtonBarButton:downAndSelected,
            s|ButtonBar s|ButtonBarButton:disabledAndSelected {
                chromeColor: #663366;
                color: #9999CC;
            }
            s|ButtonBar { 
                chromeColor: #9999CC;
                color: #663366;
            }
            s|CheckBox { 
                chromeColor: #ffffff;
                color: #ffffff;
                fontSize:14;
            }
        </fx:Style>
        
        <fx:Script>
            <![CDATA[
                import com.effect.BottomTip;
                import com.effect.BottomWindow;
                
                import mx.collections.ArrayCollection;
                import mx.controls.Alert;
                import mx.events.DragEvent;
                import mx.events.ItemClickEvent;
                import mx.managers.DragManager;
                
                import render.iconItem;
                import render.iconItem2;
                import render.iconItem3;
                import render.iconItem4;
                
                import spark.components.Button;
                import spark.components.RichText;
                import spark.components.supportClasses.ItemRenderer;
                import spark.events.IndexChangeEvent;
                
                
                [Bindable]
                private var data1:ArrayCollection = new ArrayCollection();
                
                [Embed(source="assets/apps/images/6.jpg")]
                [Bindable]
                public var backImg:Class;
                
                protected function initApp():void{
                    
                    var item:Object;
                    var i:int = 0;
                    for(;i<12;i++){
                        item = new Object();
                        item.iconID= i;
                        item.appName = "应用程序"  + i;
                        data1.addItem(item);
                    }                
                    
                }            
                
                protected function list2_dragCompleteHandler(event:DragEvent):void
                {
                    // TODO Auto-generated method stub
                    new BottomTip(this).showMsg("已激活程序!!");
                }
                
                protected function buttonbar1_changeHandler(evt:IndexChangeEvent):void
                {
                    
                    // TODO Auto-generated method stub
                    
                    var btnBar:ButtonBar = evt.target as ButtonBar;
                    
                    if(btnBar.selectedIndex == -1)
                        return;
                    
                    var rend:IFactory = null;
                    
                    switch ( btnBar.selectedItem.data )
                    {
                        case "Button1": 
                            rend = new ClassFactory(iconItem);
                            break;
                        case "Button2":
                            rend = new ClassFactory(iconItem2);
                            break;
                        case "Button3":
                            rend = new ClassFactory(iconItem3);
                            break;
                        case "Button4":
                            rend = new ClassFactory(iconItem4);
                            break;
                    }
                    if(rend != null)
                        list2.itemRenderer = rend; 
                    
                }
                
                protected function list2_dragOverHandler(event:DragEvent):void
                {
                    // TODO Auto-generated method stub
                    var msg:String = !list2dropEnabled?"无权限此操作!":"允许此此操作!";
                    new BottomTip(this).showMsg(msg);
                }
                
            
    ]]>
        </fx:Script>
        
        <s:Rect left="0" right="0" top="0" bottom="0">
            <s:fill>
                <s:LinearGradient rotation="30">
                    <s:GradientEntry color="#185d9b" ratio="0" />
                    <s:GradientEntry color="#85d7ee" ratio="0.6" />
                    <s:GradientEntry color="#85d7ee" ratio="1" />
                </s:LinearGradient>
            </s:fill>
        </s:Rect>
        
        <s:Image x="0" y="0" source="{backImg}" />
        
        
        <s:Group x="10" y="10" width="399" >
            
            <s:List id="list1" x="10"  width="100%" itemRenderer="render.iconItem" dataProvider="{data1}" dragMoveEnabled="true" dropEnabled="true" 
                    dragEnabled
    ="true" skinClass="skins.skinList">
                <s:layout><s:TileLayout horizontalGap="20" verticalGap="10" orientation="rows"/></s:layout>
            </s:List>
            
        </s:Group>
        
        <s:Group id="accptPanel" x="451" y="10" width="578" height="557" >
            <s:Rect top="0" right="0" bottom="0" left="0">
                <s:stroke>
                    <s:SolidColorStroke color="0xffffff" weight="2" />
                </s:stroke>
            </s:Rect>        
            
            <s:List id="list2" width="100%" height="100%" dragMoveEnabled="true" dropEnabled="true" dragEnabled="true"
                    itemRenderer
    ="render.iconItem2"  skinClass="skins.skinList2" dragDrop="list2_dragCompleteHandler(event)"  >
                <s:layout><s:TileLayout horizontalGap="20" paddingTop="8" paddingLeft="8" paddingRight="8" paddingBottom="8" verticalGap="10" orientation="rows"/></s:layout>
            </s:List>
            
            <s:HGroup width="100%" bottom="0" verticalAlign="bottom" horizontalAlign="center">
                <s:ButtonBar  change="buttonbar1_changeHandler(event)" >
                    <s:ArrayCollection>
                        <fx:Object data="Button1" label="小图标" />
                        <fx:Object data="Button2" label="大图标" />
                        <fx:Object data="Button3" label="窗口模式" />
                        <fx:Object data="Button4" label="操作模式" />
                    </s:ArrayCollection>
                </s:ButtonBar>
                <s:CheckBox id="list2dragEnabled" change="list2.dragEnabled = !list2.dragEnabled;" label="锁定拖出"  />
                <s:CheckBox id="list2dropEnabled" change="list2.dropEnabled = !list2.dropEnabled;" label="锁定拖入" />
            </s:HGroup>
            
        </s:Group>
        
        
    </s:Module>

    这只是一个简单的练习思路,有基础的话,到这里你已经做得出来了。

  • 相关阅读:
    Log4j详细介绍(五)----输出地Appender
    Java抽象类与接口的区别
    深入理解Java的接口和抽象类
    小程序
    小程序
    小程序
    CMS
    CMS
    微信小程序
    微信小程序
  • 原文地址:https://www.cnblogs.com/dzone/p/2219663.html
Copyright © 2011-2022 走看看