Neste tutorial vai ser explicado como utilizar os metodos Drag & Drop no Flex. Dans ce tutoriel sera expliqué comment utiliser les méthodes Drag & Drop dans Flex. Em muitos dos objectos/componentes do flex, estas propriedades estão já implementadas ea sua utilização é bem simples nesses mesmos componentes com suporte nativo Drag & Drop. Dans de nombreux articles de la / des composants de Flex, ces propriétés sont déjà mises en oeuvre et son usage est très simple de ces composants avec support natif Drag & Drop.
As coisas podem ficar um bocado mais complicadas se formos trabalhar com outros componentes, mas este não vai ser o caso. Les choses peuvent obtenir un peu plus compliqué si nous travaillons de concert avec d'autres composants, mais ce ne sera pas le cas. O tutorial vai então passar a explicar como efectuar um Drag & Drop entre e componentes que já têm o suporte nativo drag & drop, podemos escolher um dos seguintes: Le tutoriel se rendra ensuite à expliquer comment effectuer un glisser-déposer entre les composants qui sont le support natif de drag & drop, on peut choisir l'un des suivants:
Datagrid
List Liste
HorizontalList
PrintDatagGrid
TileList
Tree Arbre
Vamos então usar neste momento duas datagrid’s, e fazer um exemplo de um simples sistema de carrinho de compras, criando um novo projecto e colocando o código seguinte: Nous allons maintenant utiliser deux datagrid, et faire un exemple d'un simple système de panier d'achat, la création d'un nouveau projet et de placer le code suivant:
<? xml <? Xml version = " 1.0 " version = "1.0" encoding = " utf-8 " ?> encoding = "utf-8"?>
< mx:Application <Mx: Application xmlns:mx = " http://www.adobe.com/2006/mxml " xmlns: mx = "http://www.adobe.com/2006/mxml" layout = " absolute " mise en page = "absolue" width = " 510 " width = "510" height = " 349 " height = "349" backgroundGradientAlphas = " [1.0, 1.0] " backgroundGradientAlphas = [1.0, 1.0] " backgroundGradientColors = " [#FFFFFF, #FFFFFF] " > backgroundGradientColors = [# FFFFFF, # FFFFFF] ">
< mx:DataGrid <Mx: DataGrid id = " mercado " id = "marché" x = " 37 " x = "37" y = " 86 " y = "86" width = " 204 " width = "204" height = " 142 " height = "142" alternatingItemColors = " [#F6F0F0, #FFFFFF] " > alternatingItemColors = [# F6F0F0, # FFFFFF] ">
< mx:columns > <Mx: Columns>
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Objeto " headerText = "Object" dataField = " objeto " /> = de données "objet" />
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Preço " headerText = "Prix" dataField = " preco " /> de données = "prix" />
</ mx:columns > </ Mx: les colonnes>
< mx:dataProvider > <Mx: DataProvider>
< mx:Object <Mx: Objet objeto = " Livro A " objet = "Le Livre" preco = " 25 € " /> Prix = "25 €" />
< mx:Object <Mx: Objet objeto = " Livro B " objet = "B Papier" preco = " 30 € " /> Prix = "30 €" />
< mx:Object <Mx: Objet objeto = " Errata LA " objet = "Errata LA" preco = " 15 € " /> Prix = "15 €" />
</ mx:dataProvider > </ Mx: DataProvider>
</ mx:DataGrid > </ Mx: DataGrid>
< mx:DataGrid <Mx: DataGrid id = " carrinho " id = "panier" x = " 276 " x ='276 ' y = " 86 " > y = "86">
< mx:columns > <Mx: Columns>
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Objeto " headerText = "Object" dataField = " objeto " /> = de données "objet" />
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Preço " headerText = "Prix" dataField = " preco " /> de données = "prix" />
</ mx:columns > </ Mx: les colonnes>
</ mx:DataGrid > </ Mx: DataGrid>
< mx:Label <Mx: Label x = " 37 " x = "37" y = " 60 " y = "60" text = " Mercado " texte = "marché" width = " 140 " /> width = "140" />
< mx:Label <Mx: Label x = " 276 " x ='276 ' y = " 60 " y = "60" text = " Carrinho de compras " texte = "panier" width = " 140 " /> width = "140" />
</ mx:Application > </ Mx: Application>
Em que muito possivelmente ficarão com o design grafico como a imagem: Dans cette même éventuellement être avec la conception graphique de l'image:
Parte 1 Partie 1
O nosso objectivo é passar elementos da datagrid “Mercado” para a datarid “Carrinho de compras”, para isso podemos usar os metodos drag & drop nativos destas mesmas datagrid’s, mas para isso temos que efectuar algumas alterações no código, indicando que eles vão suportar operações desse tipo. Notre objectif est de passer datagrid éléments de "marché" de datarid «panier» d'utiliser les méthodes qui peuvent glisser-déposer à partir de la même natifs datagrid, mais pour cela nous devons faire quelques changements dans le code, ce qui indique qu'elles soutiendra ces opérations. Vamos então alterar na datagrid da esquerda (mercado) para isso adicionando o parametro dragEnabled e defini-lo como true.: Nous modifions donc la datagrid la gauche (du marché) pour ce dragEnabled ajoutant le paramètre et la définir en tant que vrai.:
< mx:DataGrid <Mx: DataGrid id = " mercado " id = "marché" x = " 37 " x = "37" y = " 86 " y = "86" width = " 204 " width = "204" height = " 142 " height = "142" alternatingItemColors = " [#F6F0F0, #FFFFFF] " alternatingItemColors = [# F6F0F0, # FFFFFF] " dragEnabled = " true " > dragEnabled = "true">
e fazendo o mesmo na datagrid da direita, mas com o parametro dropEnabled : et de faire de même dans datagrid sur le droit, mais avec le paramètre dropEnabled:
< mx:DataGrid <Mx: DataGrid id = " carrinho " id = "panier" x = " 276 " x ='276 ' y = " 86 " y = "86" dropEnabled = " true " > dropEnabled = "true">
e pronto, as nossas datagrids estão prontas a enviar e receber items, e podem salvar e correr a vossa aplicação que verão já o drag & drop em funcionamento. et prêts, nos datagrids sont prêts à envoyer et de recevoir des points, et peut enregistrer et exécuter votre application, vous aurez le drag & drop dans les affaires.
O funcionamento do drag & drop em componentes que já têm o seu suporte nativo é tão simples como aqui foi explicado, mas vamos agora fazer algo mais elaborado, usando o mesmo código. Le fonctionnement du drag & drop dans les composants qui ont déjà leur support natif est aussi simple comme cela a été expliqué, mais maintenant, nous allons faire quelque chose de plus élaboré, utilisant le même code. Vamos colocar uma lixeira no nosso layout para poder-mos eliminar items do nosso carrinho de compras. Nous allons mettre une poubelle dans notre mise en page pour le pouvoir-mos supprimer des éléments de notre panier. Para isso a seguir à ultima Pour ce faire, après la dernière colocamos o seguinte: sont les suivantes:
< mx:Image <Mx: Image x = " 219.5 " x = "219.5" y = " 256 " y = "256" source = " http://www.msdevstudio.com/mywork/recicle.png " source = "http://www.msdevstudio.com/mywork/recicle.png" maintainAspectRatio = " false " maintainAspectRatio = "false" width = " 76 " width = "76" height = " 73 " height = "73" id = " lixeira " id = "trash" /> />
e ficamos com algo muito parecido ao seguinte: et nous obtenons quelque chose de très semblable à la suivante:
Parte 2 Partie 2
Sendo que como uma imagem não têm nativamente suportado o drag & drop temos que arranjar maneira de o fazer. Comme une image n'est pas pris en charge nativement ont le drag & drop, nous devons trouver une façon de le faire. Primeiro temos que indicar à datagrid que também pode ser objecto de drag, e vamos também permitir selecionar varias linhas ao mesmo tempo, para isso acrescentamos na datagrid “carrinho” 3 parametros como o dragEnabled=”true” , o allowMultipleSelection=”true” e dragMoveEnabled=”true” ficando a nossa datagrid assim: Nous devons d'abord indiquer à l'datagrid qui peuvent également faire l'objet de glisser, et permettra également de sélectionner plusieurs lignes en même temps, pour elle ajouté au DataGrid "panier" 3 paramètres tels que dragEnabled = "true", la allowMultipleSelection = "true" et dragMoveEnabled = "true" obtenir notre datagrid comme ceci:
< mx:DataGrid <Mx: DataGrid id = " carrinho " id = "panier" x = " 276 " x ='276 ' y = " 86 " y = "86" dropEnabled = " true " dropEnabled = "true" dragEnabled = " true " dragEnabled = "true" allowMultipleSelection = " true " allowMultipleSelection = "true" dragMoveEnabled = " true " > dragMoveEnabled = "true">
Com estes parametros estou a indicar que essa datagrid (alem de já aceitar drop) está a aceitar drag também, bem como muiltipla selecção de items ea quando do drag&drop dessa datagrid para outro alvo, ela vai permiter que o seu conteudo selecionado seja movido e não copiado como acontecia antes… Avec ces paramètres indiquent que je suis datagrid (outre plus accepter de chute) est également accepter de glisser et muiltipla sélection d'articles et lorsque le drag & drop ce datagrid à une autre cible, il permettra à votre contenu sélectionné n'est pas déplacé et copié tel qu'il était avant ...
Se repararem nos parametros da tag mx:image existem alguns elementos Drag, que permitem que nós possamos fazer com que o objecto lide com darg & drop, e é precisamente uma dessas propriedades que vamos utilizar, escrevendo na tag da nossa imagem lixeira, o seguinte: Si vous regardez dans les paramètres de la balise mx: Faites glisser l'image il ya des éléments qui nous permettent peut faire l'objet porte sur dargar & drop, et c'est précisément l'une de ces propriétés que nous utilisons, de l'écriture de la balise image de nos ordures, les :
dragEnter=”lidaEnter(event)” dragEnter = "lidaEnter (événement)"
ficando a tag mx:image assim: Obtenir le tag mx: image comme ceci:
< mx:Image <Mx: Image x = " 219.5 " x = "219.5" y = " 256 " y = "256" source = " http://www.msdevstudio.com/mywork/recicle.png " source = "http://www.msdevstudio.com/mywork/recicle.png" maintainAspectRatio = " false " maintainAspectRatio = "false" width = " 76 " width = "76" height = " 73 " height = "73" id = " lixeira " id = "trash" dragEnter = " lidaEnter(event) " dragEnter = "lidaEnter (événement)" /> />
Estes dois parametros dragEnter e dragDrop são eventos que são disparados quando o objecto é alvo de operações drag&drop, neste caso a função lidaEnter() será chamada quando um objecto alvo de drag passar em cima da nossa imagem, aqui temos que indicar ao flex que ela se encontra apta para drag. Ces deux paramètres sont DragDrop dragEnter et les événements qui sont déclenchés quand il est la cible de drag & drop des opérations, dans ce cas, la fonction lidaEnter () est appelée quand un objet cible pour faire glisser passe au-dessus de notre image, ici nous avons à donner à flex est en mesure de la traînée.
Falta apenas criar a funçao para lidar com este evento, mais precisamente a lidaEnter() para isso colocamos o seguinte código logo a seguir à 2 linha (a seguir à tag mx:application): Tout ce qui reste est la création de la fonction de traiter cet événement lidaEnter spécifiquement l'() pour mettre le code suivant après la ligne 2 (après le tag mx: application):
< mx : Script > <Mx: Script>
<! [ CDATA [ <! [CDATA [
import d'importation mx . events . DragEvent ; mx. événements. DragEvent;
import d'importation mx . managers . DragManager ; mx. gestionnaires. DragManager;
private privé function fonction lidaEnter ( event : DragEvent ) : void { lidaEnter (event: DragEvent): void (
var var dropTarget : Image = event . currentTarget dropTarget: Image = état de cause. currentTarget as le Image ; Image;
DragManager . acceptDragDrop ( dropTarget ) ; DragManager. AcceptDragDrop (dropTarget);
DragManager . showFeedback ( DragManager . MOVE ) ; DragManager. ShowFeedback (DragManager. MOVE);
} )
]] > ]]>
< / mx:Script> </ Mx: Script>
E pronto, temos o nosso Mercado com carrinho de compras e lixeira para eleminar um ou mais items do carrinho de compras. Et prêt, nous avons le marché avec notre panier d'achat et des ordures disqualifié pour un ou plusieurs articles de votre panier.
Como podem reparar não têm nenhuma dificuldade, Por isso, usem e abusem! Comment peut réparer n'ont pas de difficulté, je me suis donc l'usage et l'abus!
Código Final: Code final:
<? xml <? Xml version = " 1.0 " version = "1.0" encoding = " utf-8 " ?> encoding = "utf-8"?>
< mx:Application <Mx: Application xmlns:mx = " http://www.adobe.com/2006/mxml " xmlns: mx = "http://www.adobe.com/2006/mxml" layout = " absolute " mise en page = "absolue" width = " 510 " width = "510" height = " 349 " height = "349" backgroundGradientAlphas = " [1.0, 1.0] " backgroundGradientAlphas = [1.0, 1.0] " backgroundGradientColors = " [#FFFFFF, #FFFFFF] " > backgroundGradientColors = [# FFFFFF, # FFFFFF] ">
< mx:Script > <Mx: Script>
<![CDATA[ <! [CDATA [
import mx.events.DragEvent; mx.events.DragEvent importation;
import mx.managers.DragManager; mx.managers.DragManager importation;
private function lidaEnter(event:DragEvent):void{ lidaEnter privée (event: DragEvent): void (
var dropTarget:Image = event.currentTarget as Image; var dropTarget: Image = event.currentTarget l'image;
DragManager.acceptDragDrop(dropTarget); DragManager.acceptDragDrop (dropTarget);
DragManager.showFeedback(DragManager.MOVE); DragManager.showFeedback (DragManager.MOVE);
} )
]]> ]]>
</ mx:Script > </ Mx: Script>
< mx:DataGrid <Mx: DataGrid id = " mercado " id = "marché" x = " 37 " x = "37" y = " 86 " y = "86" width = " 204 " width = "204" height = " 142 " height = "142" alternatingItemColors = " [#F6F0F0, #FFFFFF] " alternatingItemColors = [# F6F0F0, # FFFFFF] " dragEnabled = " true " > dragEnabled = "true">
< mx:columns > <Mx: Columns>
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Objeto " headerText = "Object" dataField = " objeto " /> = de données "objet" />
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Preço " headerText = "Prix" dataField = " preco " /> de données = "prix" />
</ mx:columns > </ Mx: les colonnes>
< mx:dataProvider > <Mx: DataProvider>
< mx:Object <Mx: Objet objeto = " Livro A " objet = "Le Livre" preco = " 25 € " /> Prix = "25 €" />
< mx:Object <Mx: Objet objeto = " Livro B " objet = "B Papier" preco = " 30 € " /> Prix = "30 €" />
< mx:Object <Mx: Objet objeto = " Errata LA " objet = "Errata LA" preco = " 15 € " /> Prix = "15 €" />
</ mx:dataProvider > </ Mx: DataProvider>
</ mx:DataGrid > </ Mx: DataGrid>
< mx:DataGrid <Mx: DataGrid id = " carrinho " id = "panier" x = " 276 " x ='276 ' y = " 86 " y = "86" dropEnabled = " true " dropEnabled = "true" dragEnabled = " true " dragEnabled = "true" allowMultipleSelection = " true " allowMultipleSelection = "true" dragMoveEnabled = " true " > dragMoveEnabled = "true">
< mx:columns > <Mx: Columns>
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Objeto " headerText = "Object" dataField = " objeto " /> = de données "objet" />
< mx:DataGridColumn <Mx: DataGridColumn headerText = " Preço " headerText = "Prix" dataField = " preco " /> de données = "prix" />
</ mx:columns > </ Mx: les colonnes>
</ mx:DataGrid > </ Mx: DataGrid>
< mx:Label <Mx: Label x = " 37 " x = "37" y = " 60 " y = "60" text = " Mercado " texte = "marché" width = " 140 " /> width = "140" />
< mx:Label <Mx: Label x = " 276 " x ='276 ' y = " 60 " y = "60" text = " Carrinho de compras " texte = "panier" width = " 140 " /> width = "140" />
< mx:Image <Mx: Image x = " 219.5 " x = "219.5" y = " 256 " y = "256" source = " http://www.msdevstudio.com/mywork/recicle.png " source = "http://www.msdevstudio.com/mywork/recicle.png" maintainAspectRatio = " false " maintainAspectRatio = "false" width = " 76 " width = "76" height = " 73 " height = "73" id = " lixeira " id = "trash" dragEnter = " lidaEnter(event) " dragEnter = "lidaEnter (événement)" /> />
</ mx:Application > </ Mx: Application>
Podem ver o resultado final online com o código fonte disponivel aqui Ils peuvent voir le résultat en ligne avec le code source disponible ici
Abraço e espero que seja util e esclarecedor. Hug et j'espère qu'il est utile et instructif.
versão pdf temporariamente indisponivel. version pdf temporairement indisponible.
13 Commentaires
Merci Mario!
Man, je cherchais pour cette longtemps! Et il a rien trouvé de Nice.
Félicitations pour votre cours d'instruction et l'initiative d'aider, restez!
Oupa George, même si elle a contribué ...
Merci ..
Serrer dans ses bras.
Très belle, j'ai aimé l'article, m'a donné l'idée à l'écran ce que je faisais en flex, juste que je ne pouvais pas finir, si mon problème et que les colonnes d'un autre réseau (drop) labelfunctin sont par nécessité et non de données dans ce Si elle ne fonctionne pas, vous avez une idée?
Janderson bien, mais vous utilisez un labelFunction pour cela? jamais testé bien (mais devrait fonctionner), mais je pense que plutôt que d'étiqueter en fonction peut utiliser un élément moteur de rendu que cela devrait fonctionner ... mais mieux expliquer quelle est sa fonction d'étiquette, et si ce n'est que dans datagrid ou aussi dans chaque colonne ...
Pour optimiser le contenu de votre grille (baisse) peuvent utiliser la DragDrop = "fonction (événement)" afin d'optimiser le contenu de votre site ...
voir:
http://blog.flexmonkeypatches.com/2008/03/24/nested-item-renderers-with-scrollbars-and-drag-and-drop-enabled-scroll-dont-drag-please/
et le meilleur exemple:
http://www.adobe.com/devnet/flex/quickstart/adding_drag_and_drop/
Essayez d'expliquer un peu mieux ...
Serrer dans ses bras.
Mario, VLW d'attention, je ouvrir un forum sur le thème de la flexbrasil, je pense qu'il ya de mieux expliquer ce dont j'ai besoin.
http://forum.flexbrasil.com.br/viewtopic.php?f=4&t=532
l'écran est comme suit, coût de formation, quand l'homme en faisant glisser une table de prix de la grille est l'endroit où le prix du produit, je vais écrire à la banque que la liste de prix pour ce produit, et puis la table liste déjà avec le Suggestions de la valeur des ventes. plus de cela, je dois vérifier si le tableau n'a plus été enregistrée par exemple, pourquoi doit «intercepter» l'événement, de faire quelques vérifications et les calculs.
VLW.
ah! VLW et par les liens, je vais examiner la question Reder et analysent comment il fonctionne, grâce
Merci de partager leurs connaissances gratuitement, il a été très utile.
J'ai juste une question, y at-il une façon de le faire fonctionner dans Opera?
Encore une fois, je vous remercie.
Bonjour Brian, ne fonctionne pas dans Opera? Cela est très étrange ... je ne suis pas au courant de ce problème ... mais il ne problème dans ce cas? ou ont eu des problèmes de flexion en avant?
Observe.
Bonjour, Mario. En faisant que son exemple a problème dans Opera, mais dans d'autres navigateurs ont fonctionné normalement. Alors, il refiz (sans copier le code, mais faire la même chose) et fonctionnait parfaitement dans tous les navigateurs, avec un petit détail: Si, par exemple, je copie le dossier où le fichier est enregistré et passer à un autre ordinateur, ou même collez-le dans un autre répertoire sur mon ordinateur, commence à être un problème. Le glisser-déposer entre le marché et la sélection des œuvres, mais pour essayer de faire glisser le panier pour les poubelles, tout simplement pas. Cela se passe dans tous les navigateurs, Exeter dans Internet Explorer.
Un autre problème, en dehors du contexte, avec Opera'm pas en mesure de laisser des commentaires ici.
Je vous remercie de votre attention, continuer l'excellent travail.
Brian Eh bien, permettez-moi de bouche bée, n'a jamais connu une telle chose ... mais donne une erreur?