IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Drag and Drop avec un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut Drag and Drop avec un JPanel
    Bonjour à tous,

    Je souhaiterai savoir si la fonction Drop est possible dans un JPanel. Le but étant de glisser un objet d'une liste dans une autre fenêtre composée d'un JPanel.
    Pouvez vous me donnez des indications pour réaliser cette fonction (j'ai lu les tutoriels de Mickael Baron et Romain Guy)?

    Merci

  2. #2
    Membre habitué
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Points : 181
    Points
    181
    Par défaut
    Tous les JComponent ont les methodes setTransferHandler etc... Ils peuvent donc tous recevoir du drag and drop.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    Tu saurais pas comment faire pour le transfert d'un objet composé de 4 "int" ?

  4. #4
    Membre habitué
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Points : 181
    Points
    181
    Par défaut
    Tu peux transférer ce que tu veux, regarde ce tuto: http://mbaron.developpez.com/javase/dnddt/

    Tu va créer un Transferable et mette ton objet à l'interieur, ensuite tu implémente les interface de Drag sur l'objet source et de drop sur ton JPanel. Et voila!

    Le drag and drop n'est pas facile à aborder mais en fait ça n'est pas si compliqué.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    J'ai déjà lu ce tuto plusieurs fois. Ce que je ne comprends pas c'est comment le Transferable va gérer le transfert de données (en gros je ne comprends pas ce que fait la class TransferableExample page 20).

    Pour l'implémentation du Drag es-ce qu'un "jTree.setDragEnabled(true)" suffit?

    Comment s'y prendre pour l'implémentation du Drop de mon JPanel?

    Merci de ton aide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    Ce que je ne comprends pas c'est comment le Transferable va gérer le transfert de données
    Du coup je ne vois pas comment adapter cette exemple à mon cas.

  7. #7
    Membre habitué
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Points : 181
    Points
    181
    Par défaut
    Citation Envoyé par scorplayer Voir le message
    J'ai déjà lu ce tuto plusieurs fois. Ce que je ne comprends pas c'est comment le Transferable va gérer le transfert de données (en gros je ne comprends pas ce que fait la class TransferableExample page 20).

    Pour l'implémentation du Drag es-ce qu'un "jTree.setDragEnabled(true)" suffit?

    Comment s'y prendre pour l'implémentation du Drop de mon JPanel?

    Merci de ton aide
    setDragEnabled à true va te gérer le drag seul, mais par contre les données transférées ne seront que le texte du noeud (ou des noeuds) sélectionné(s). Si ça te suffit, tu peux le faire et implémenter un TransferHandler du flavor texte pour ton jpanel.

    Si tu veux échanger de vrais objet javas, il faut créer un transférable avec ces objets à l'intérieur puis implémenter les bonnes interfaces...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    Merci mais j'ai résolu le problème.

    En fait, je n'étais pas obligé de faire un transfert de fichier. Du coup, il fallait simplement savoir quel objet était sélectionné dans un arbre pour faire l'action désirée au moment du "lâcher".

    J'ai quand même galèré pour paramétrer la source (un JPanel composé d'un JTree) et la cible (JPanel). Voila le résultat de mon travail pour ceux qui sont intéressés :

    Pour que la source soit apte à "transférer" des données (ce n'est pas vraiment un transfère d'objet mais on va vouloir détecter quel objet est sélectionné dans l'arbre pour effectuer une action particulière) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    myTree.setDragEnabled(true);
    myTree.addTreeSelectionListener(new TreeSelectionListener()
    {
    public void valueChanged(TreeSelectionEvent e) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode)myTree.getLastSelectedPathComponent();
    	if (node == null) return;
    		Object nodeInfo = node.getUserObject();
    		SelectedObject=nodeInfo.toString();
    }});
    Pour que la cible soit apte à "recevoir" des données (ce n'est pas une réception mais une action réalisée selon l'objet sélectionné dans l'arbre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new DropTarget(this,new CarteDropTargetListener(this,Fdessin));
    Ces codes sont à ajouter respectivement dans les classes source et cible.
    "this" est ici un JPanel. Nous n'avons plus qu'à créer la classe CarteDropTargetListener avec les arguments dont nous aurons besoin pour la détection de l'objet sélectionné dans l'arbre et l'action que l'on désire faire (ici un JPanel et un objet dessin composé du JTree):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class CarteDropTargetListener implements DropTargetListener{
     
    	JPanel pa;
    	Dessin da;
     
    	public CarteDropTargetListener(JPanel p, Dessin d){
    		this.pa=p;
    		this.da=d;
    	}
     
    	public void dragEnter(DropTargetDragEvent e) {
    		if (!isDragAcceptable(e))
    		{e.rejectDrag();return;}
    	}
    	public void dragOver(DropTargetDragEvent e) {}
    	public void dropActionChanged(DropTargetDragEvent e) {
    		if (!isDragAcceptable(e))
    		{e.rejectDrag();return;}
    	}
    	public void dragExit(DropTargetEvent e) {}
    	public void drop(DropTargetDropEvent e) {
    		if (!isDropAcceptable(e))
    		{e.rejectDrop();return;}
                    if(da.SelectedObject=="Nom d'un objet de l'arbre") {"action désirée pour cet objet"}
                    if(da.SelectedObject=="Nom2") {"action désirée pour cet objet"}
                    if(da.SelectedObject=="Nom3") {"action désirée pour cet objet"}
                    ...
    		e.dropComplete(true);
    	}
     
    	public boolean isDropAcceptable(DropTargetDropEvent e) {
    		return (e.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE)!=0;
    	}
    	private boolean isDragAcceptable(DropTargetDragEvent e) {
    		return (e.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE)!=0;
    	}
    }
    La variable SelectedObject de la classe Dessin contient le nom de l'objet sélectionné dans l'arbre (voir le code plus haut concernant la source).

    J'ai fait le maximum pour que mes explications soient le plus compréhensible possible. En espérant que ça aidera certain...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Swing] Drag And Drop et Dimension JPanel
    Par nicolav dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/06/2008, 00h16
  2. Réponses: 6
    Dernier message: 18/12/2007, 09h16
  3. Drag and drop avec SDL et le langage C.
    Par GSébastien dans le forum SDL
    Réponses: 4
    Dernier message: 13/12/2007, 01h34
  4. [AJAX] Drag and Drop avec AJAX
    Par bonano dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/03/2007, 22h44
  5. "Drag and drop" avec directinput
    Par batosai dans le forum DirectX
    Réponses: 1
    Dernier message: 16/06/2004, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo