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&Drop d'un dérivé de JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut Drag&Drop d'un dérivé de JPanel
    Bonjour,



    J'ai créé un composant 'NotePane' dérivé d'un JPanel qui comporte 2 champs privés.
    Un String pour le texte et un boolean isImportant qui gère la couleur du composant.

    J'importe des instances de cet objet dans un JScrollPane. (voir image plus haut)

    J'aimerai donner la possibilité à l'utilisateur de changer l'ordre des NotePane dans ce JScrollPane en Drag&Drop... malheuresement sans succés pour le moment.

    J'ai regardé les explications dans le .pdf '« Drag and Drop » et transfert de données' de Mickaël BARON. Il explique que les objets qui n'ont pas de méthode setDragEnabled(boolean b) doivent déclancher le drag avec un mouseListener. Il donne un exemple avec un JLabel.
    Je pense être dans un cas similaire, mais j'ai du mal à le mettre en oeuvre...

    Pouvez-vous me confirmer que je prend le bon chemin ? Avez-vous des exemples de JPanel qui supportent le Drag ? Dois-je créer un DataFlavor ?
    Comme vous le voyez c'est encore assez confus dans ma p'tite tête...

    Merci de votre aide !

  2. #2
    Membre Expert
    Avatar de X-plode
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2005
    Messages
    682
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2005
    Messages : 682
    Par défaut
    Salut

    Est ce que ceci pourrait t'aider ?

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    import java.awt.Event;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JLayeredPane;
    import javax.swing.JPanel;
     
    public class Test2 extends JFrame implements MouseMotionListener{
    JLabel[] label = new JLabel[100]; //Copies de l'image
    JPanel p ;//notre panel principal qui contient les images
    int nbCopie=0; //nombre de copies existantes
     
    public Test2(){//constructeur qui créé la fenetre principale
    super("titre");
    p = new JPanel(null);
    createCopy(); //on ajoute une copie au panel
    this.getContentPane().add(p);
    this.setSize(800,600);
    this.setVisible(true);
    }
     
    public static void main(String[] args) {
    new Test2();
    }
     
     
    public void createCopy(){// créé une nouvelle copie de l'image
    label[nbCopie]=new JLabel(new ImageIcon("logo.png")); 
    //initialise l'image
    label[nbCopie].setBounds(0,0,120,160); // initialise sa position aux coordonnéees 0,0
    label[nbCopie].addMouseMotionListener(this);//ajoute un mousemotionlistener pour détecter le drag n drop
    p.add(label[nbCopie]);//on ajoute la copie au panel
    p.repaint();//on redessine le panel
    nbCopie++; //incrémente le nombre de copies existantes
    }
     
     
    public void mouseDragged(MouseEvent e) {
    //lorsque qu'on fais du drag n drop sur une copie
     
    //si la derniere copie créé a été bougée (coordonnées 0,0), 
    //on en créé une nouvelle qui sert de modele
    if (label[nbCopie-1].getX() != 0 && label[nbCopie-1].getY()!=0) createCopy();
     
    JLabel temp=(JLabel)e.getSource();
    //créé une référence vers la copie sur laquelle on a cliqué
     
    temp.setBounds(temp.getX()+e.getX()-60,temp.getY()+e.getY()-80,120,160);
    //déplace la copie sur laquelle je fais du drag n drop
    }
     
    public void mouseMoved(MouseEvent e) {
    }
    }

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    J'avais déjà vu cet exemple, mais c'est vrai que je peux surement gérer ce que je veux faire uniquement avec des mouseListener...
    Je pense creer une classe MyClipBoard qui sauvegardera mon objet au moment d'un mousePressed. Un GlassPane pour faire un drag visuel et un paste() depuis MyClipBoard au moment du mouseRelease.

    Merci !

Discussions similaires

  1. Drag and Drop d'un JTree vers un JPanel
    Par Furlaz dans le forum Composants
    Réponses: 2
    Dernier message: 29/08/2013, 02h38
  2. [Swing] Drag And Drop et Dimension JPanel
    Par nicolav dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 14/06/2008, 00h16
  3. Drag and Drop avec un JPanel
    Par scorplayer dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/05/2008, 19h35
  4. Drag&drop d'image entre 2 JPanel
    Par deadstar62 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 28/08/2007, 23h28

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