2011-02-23 77 views
0

我想拖動一個組件,然後拖放我希望它創建一個面板。這是我有的動作,但它似乎並沒有工作,任何想法爲什麼?如何創建一個面板上的拖放在flex 4?

private function dragDrop(e:DragEvent): void { 
    var userPanel:Panel = new Panel(); 
    userPanel.width = 100; 
    userPanel.height = 100; 
    userPanel.x = 10; 
    userPanel.y = 10; 
    userPanel.visible = true; 
    addChild(userPanel); 
} 
+0

需要更多的細節是什麼它似乎並不奏效的意思是,它打一個斷點在代碼,代碼註冊到的是哪個偵聽器?這將創建一個新的面板,如果運行使用Flex 3的味道,如果4您需要使用addElement,但我相信這是一個編譯時錯誤。 – shaunhusain 2011-02-23 18:12:13

+0

對不起,「它不工作」我的意思是它不會添加(至少顯示)新創建的面板。我會給addElement一個嘗試。 – Dennis 2011-02-23 18:16:04

+0

沒問題只是一個匆忙的問題我敢肯定,我沒有注意到你在問題標題中有flex 4,希望addElement適用於你(還要注意很多樣式在4中被刪除,所以你可能需要設置一個背景顏色或面板上的這些線條的東西,或像userPanel.graphics.beginFill(0xff0000); userPanel.graphics.drawRect(0,0,20,20);只是爲了確保你看到的東西 – shaunhusain 2011-02-23 18:21:37

回答

0

酷得到它的工作...所以我缺少的是接受對dragEnter事件拖累步驟這裏是全碼:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.core.IUIComponent; 
      import mx.events.DragEvent; 
      import mx.managers.DragManager; 

      import spark.components.Panel; 
      private function dragDrop(e:DragEvent): void { 
       var userPanel:Panel = new Panel(); 
       userPanel.width = 100; 
       userPanel.height = 100; 
       userPanel.x = 10; 
       userPanel.y = 10; 
       userPanel.visible = true; 
       addElement(userPanel); 
      } 


      protected function canvas1_dragEnterHandler(event:DragEvent):void 
      { 
       // TODO Auto-generated method stub 
       DragManager.acceptDragDrop(event.currentTarget as IUIComponent); 
      } 

     ]]> 
    </fx:Script> 
    <mx:Canvas dragEnter="canvas1_dragEnterHandler(event)" dragDrop="dragDrop(event)" width="100%" height="100%" backgroundColor="blue"/> 
    <s:List dataProvider="{new ArrayCollection(['a','item','in','here'])}" dragEnabled="true"/> 
</s:Application> 

肖恩

1

您添加了代碼包括是有效的。是否正確配置了拖動啓動器?放置目標是否配置爲接受拖放?

下面是一些代碼,將增加一個面板canvas1時canvas2拖入canvas1:

protected function canvas2_dragStartHandler(event:MouseEvent):void { 
    var dragInitiator:Canvas=Canvas(event.currentTarget); 
    var ds:DragSource = new DragSource();    

    DragManager.doDrag(dragInitiator, ds, event); 
} 

protected function canvas1_dragEnterHandler(event:DragEvent):void { 
    DragManager.acceptDragDrop(Canvas(event.currentTarget)); 
} 

protected function canvas1_dragDropHandler(event:DragEvent):void { 
    var userPanel:Panel = new Panel(); 
    userPanel.width = 100; 
    userPanel.height = 100; 
    userPanel.x = 10; 
    userPanel.y = 10; 
    userPanel.visible = true; 
    Canvas(event.currentTarget).addChild(userPanel); 
} 
+0

哎呀,猜猜我應該刷新之前張貼我的答案。看起來像你想出來的。 – jdusbabek 2011-02-23 18:56:09

+0

呃無論你的答案是否正確,以及好工作,你也得到一顆金星:) – shaunhusain 2011-02-23 18:57:41