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

 Java Discussion :

Drag 'n Drop JPanels


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Par défaut Drag 'n Drop JPanels
    Bonsoir
    Voilà je commence à comprendre comment marche les interfaces graphique mais j'ai un soucis avec les drags & drops.
    Je dois faire un Jeu de Dame et j'ai pensé utiliser cette technique.
    J'ai un damier qui extends d'un JPanel, et pour chaque pion sur mon damier, j'ai une classe Pion qui extends aussi d'un JPanel que je place avec la méthode setBounds().

    J'ai vite vu que ce n'étais pas possible de faire setDragEnabled sur un JPanel, j'ai donc cherché sur internet et trouvé 150 version différentes pour le même problème.

    Je ne demande pas de code, juste une piste pour m'indiquer la solution la plus facile pour résoudre mon problème. J'ai cru comprendre qu'il fallait utiliser un TransferHandler pour tranferer mon Pannel mais je ne vois pas comment l'implémenter correctement.

    Merci pour vos indication ! =)

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bonsoir.

    Mauvais conception initialement.
    Je te conseille plutôt de faire un seul composant s'occupant de toute la logique de dessin (pions et cases comprises), de cette façon tu auras juste à gérer un simple MouseMotionListener. Rien de violent et de bug prone.

    Quou qu'il en soit pour un jeu on n'utilise peu les composants Swing en eux même car ils ne sont prévus pour ça, ils sont juste prévus pour faire des interfaces, de même pour les layouts.

    ce que l'on fait c'est de créer un composant héritant de JComponent et redéfinissant la méthode paintComponent qui effectue plusieurs passes ,une par couche à afficher. La première passe affiche le damier, la seconde les pièces en place et la troisième la pièce qui est en cours de drag. De ce fait tu t'abstrais de toute la complexité induite par Swing qui pour un jeu n'est vraiment pas nécessaire.

    Les composants Swings sont super utiles quand utilisés de la bonne façon, c'est à dire pour construire une interface graphique d'application, des menus et ainsi de suite. Par contre pour réaliser la partie purement jeu ce n'est vraiment pas ça.

  3. #3
    Membre averti
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Par défaut
    Merci pour la réponse
    Donc si je comprends bien, la méthode à suivre et de simplement me limiter a une classe que j'apellerais "Damier" qui s'occupe d'un premier temps dans paintComponent de farbiquer le background et après de refaire un second passage en placant directement les pions avec un g.drawImage(). Et l'implante l'interface MouseMotionListener pour pouvoir gérer les coups. Et donc en récupérant les coordonés, je peux savoir sur quel pion il a cliqué et donc agir en conséquence ?

    Mais il me semble que MouseMotionListener permet l'implantation juste de deux méthodes non ? Une pour le focus et l'autre pour le drag ? Il n'est pas possible d'être informé lorsque l'utilisateur lâche la souris ? C'est plus ce qui m'intéresse maintenant pour vérifier que la case ou il a laché le pion correspond bien à une case valide ?

    Encore merci

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Tu as tout ce qu'il te faut dans javax.swing.event.MouseInputListener ou javax.swing.event.MouseInputAdapter

  5. #5
    Membre averti
    Profil pro
    Lycéen
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Par défaut
    Merci beaucoup pour les informations
    J'ai finalement ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Damier extends JPanel implements MouseMotionListener, MouseListener {
     
    }
    Et ça marche super bien

    Merci ! (ça reste beaucoup plus simple que le drag 'n drop !)

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. Drag and Drop d'un JTree vers un JPanel
    Par Furlaz dans le forum Composants
    Réponses: 2
    Dernier message: 29/08/2013, 02h38
  3. Drag and drop d'un JPanel à un autre
    Par junior222 dans le forum Composants
    Réponses: 10
    Dernier message: 07/09/2012, 13h14
  4. [Swing] Drag And Drop et Dimension JPanel
    Par nicolav dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/06/2008, 00h16
  5. Drag and Drop avec un JPanel
    Par scorplayer dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/05/2008, 19h35

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