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 :

[Java6] drag 'n drop : action dépendante du composant cible


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut [Java6] drag 'n drop : action dépendante du composant cible
    Bonjour,

    J'ai un petit problème avec le drag n drop de Java 6 : Comment faire, et quelle est la méthode la plus propre, pour que l'action du drag (move ou copy par exemple) soit en fait dépendante du composant cible du drop, et non du composant source ?

    Je m'explique par un exemple :

    Soit 2 JTree, A et B, contenant le même type d'objets. Comment faire le comportement suivant :

    - Si on drag depuis A, puis on drop sur A => Action = MOVE
    - Si on drag depuis B, puis on drop sur B => Action = MOVE
    - Si on drag depuis A, puis on drop sur B => Action = COPY

    Le problème vient du fait que lors de l'implémentation de la méthode importData du transferthandler associé, je n'ai aucun moyen de connaitre le composant source (j'ai accès qu'au composant cible), je ne peux donc différencier le fait que si après avoir droppé les éléments au bon endroit, je dois les supprimer ou non de la source...

    Comment dois-je m'y prendre ?

    J'ai essayé de passer par le transferable, afin qu'il mémorise le composant qui l'a créé, et ajouté une méthode pour le retourner, cependant, le transferable récupéré n'est pas un objet du type de mon transferable (on dirait une sorte de stub...), et je ne peux invoquer que les méthodes définies dans l'interface transferable...

    Si quelqu'un a déjà rencontré ce problème, ou a une idée, merci de m'aider

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    vu le peu de succès que tu rencontres, je tente, même si je ne suis pas un as du DnD. Tu peux peut-être jouer sur le fait que dans le cas d'un Drag and Drop sur le même composant, c'est le même TransferHandler qui est sollicité, en surchargeant comme ceci :
    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
    public class MonTransferHandler extends TransferHandler {
     
      private Transferable currentTransfer = null;
      private JComponent currentComponent = null;
     
      public void exportDone(JComponent source, Transferable data, int action) {
        currentTransfer = data;
        currentComponent = source;
        super.exportDone(source, data, action);
      }
     
      public void importData(JComponent source, Transferable data) {
          // il faut peut-être tester avec .equals()
          // mais ça devrait marcher comme ça
        if(source == currentComponent && data == currentTransfer) {
          //on déplace
        } else {
          // on copie
        }
        currentTransfer = null;
        currentComponent = null;
      }
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Citation Envoyé par xavlours
    vu le peu de succès que tu rencontres, [...]
    ... C'est très certainement du au fait que je n'ai pas mis une seule ligne de code dans mon post initial... C'est de suite moins sexy, ça plait moins

    Merci en tout cas de t'être penché sur le sujet, car j'ai toujours ce problème (j'esperait que quelqu'un m'aide à trouver... j'ai mis le développement de cette petite partie en pause )...

    Concernant ta solution, elle ne marche pas

    La méthode exportDone est appelée après le importData (si celle-ci renvoie true).

    En tout cas, tu as bien cerné quel était mon problème... J'espère donc que quelqu'un qui a déjà rencontré ce problème, tombe sur mon topic et me réponde

    On est que très très rarement le premier à se poser une question, mais on en a trop souvent l'impression

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Alors as-tu essayé de surcharger exportAsDrag au lieu de exportDone ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Effectivement, avec le exportAsDrag je devrais y arriver plus ou moins proprement

    Merci pour ton aide encore une fois xavlours

  6. #6
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Bon, n'ayant pas trouvé d'autres solutions, j'ai finalement encapsulé le composant source dans l'objet transféré... Ainsi, je peux savoir d'où viennent mes objets et agir en conséquence... C'est plus simple a mettre en place que de passer par la méthode exportAsDrag (dans mon cas, car j'ai 2 transfertHandler...)

    Merci à toi xavlours pour m'avoir aidé

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

Discussions similaires

  1. Déclencher une action suite à un drag and drop [Tree]
    Par scorp_imaj dans le forum Ext JS / Sencha
    Réponses: 3
    Dernier message: 06/12/2013, 13h27
  2. Drag and drop pour un composant non prévu pour cela
    Par Patrice Henrio dans le forum Général Java
    Réponses: 6
    Dernier message: 05/11/2013, 20h28
  3. Drag and Drop aboutissant à une action
    Par franck06 dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 20/03/2012, 17h58
  4. [SWT] Drag and Drop: lier la source à la cible
    Par benoit31 dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 28/04/2010, 16h31
  5. Composants et drag and drop
    Par SheikYerbouti dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 29/09/2006, 20h57

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