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

Agents de placement/Fenêtres Java Discussion :

problème avec drag and drop


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut problème avec drag and drop
    Bonsoir à tous,

    alors je vous présente ce code :
    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) {
    }
    }


    comme vous avez compris, le code permet de faire le drag and drop d'une image dans une fenetre construite d'un seul panneau, et il fonctionne très bien.

    le problème ici c'est que je n'arrive pas à modifier mon code de façon qu'il me permettra de déplacer cette image d'un panel à un autre.
    en fait, je veux que ma fenetre soit divisée en deux panels,l'un contiendra l'image(ou précisément sa copie originale), l'autre est celui que je déposerais mes copies de l'image dedans.


    si ça vous intéresse, merci de me répondre.
    j'ai besoin d'un coup de pouce, alors n'hésitez pas.
    merci ..

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    Bonsoir,
    j'ai essayé de corriger mon code avec ceci.
    mais lorsque je clique sur l'image (située dans le panel p) et que j'essaye à la déplacer, il se produit un comportement étrange : deux copies de l'images sont créées, l'une s'installe dans le panel p, l'autre dans le panel2 sans que je puisse la déplacer une seconde fois
    voici le code :




    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;
    import javax.swing.BorderFactory;
    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{
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    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
    private JPanel panel2;
    private JLayeredPane dragLayer;
    private JLabel temp2; //référence sur le JLabel en cours de déplacement

    public Test2(){//constructeur qui créé la fenetre principale
    super("titre");
    p = new JPanel();
    p.setBorder(BorderFactory.createLineBorder(Color.GREEN));
    createCopy(); //on ajoute une copie au panel
    this.getContentPane().add(p, BorderLayout.WEST);
    p.setPreferredSize(new Dimension(120, 0)); //mettre la largeur désirée
    this.setSize(800,600);
    this.setVisible(true);
    panel2 = new JPanel(null);
    panel2.setBorder(BorderFactory.createLineBorder(Color.BLUE));
    add(panel2);
    dragLayer = getLayeredPane();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
    new Test2();
    }


    public void createCopy(){// créé une nouvelle copie de l'image
    p.add(label[nbCopie]=new JLabel(new ImageIcon("C:\\Documents and Settings\\Naira\\workspace\\mon projet\\ressources\\folder.png")));
    //initialise l'image
    label[nbCopie].setBounds(0,0,120,160); // initialise sa position aux coordonnéees 0,0
    label[nbCopie].addMouseMotionListener(this);
    label[nbCopie].addMouseListener(new MouseAdapter() {
    public void mouseReleased(MouseEvent e) {

    if (temp2 != null) {
    dragLayer.remove(temp2);
    Point loc = temp2.getLocation();
    loc.translate(panel2.getX(), panel2.getY());
    temp2.setLocation(loc);}

    if(temp2.getX() < 0){
    dragLayer.repaint();
    return ;}

    panel2.add(temp2);
    temp2 = null;
    panel2.repaint();
    }

    });

    nbCopie++; //incrémente le nombre de copies existantes
    }




    public void mouseDragged(MouseEvent e) {
    if (label[nbCopie - 1].getX() != 0 && label[nbCopie - 1].getY() != 0) {
    temp2 = (JLabel) e.getSource();
    p.remove(temp2);
    createCopy();
    dragLayer.add(temp2, JLayeredPane.DRAG_LAYER);}

    }

    public void mouseMoved(MouseEvent e) {
    }
    }



    si vous avez une idée, merci de la publier ici.

Discussions similaires

  1. Problème avec Drag and Drop WPF
    Par Moh1267 dans le forum C#
    Réponses: 2
    Dernier message: 04/06/2014, 11h35
  2. Problème de Drag and drop
    Par triblekano dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 26/12/2010, 17h57
  3. Problème de drag and drop
    Par te-san dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 30/08/2010, 10h28
  4. Problème de Drag and Drop
    Par totodof dans le forum Windows Presentation Foundation
    Réponses: 18
    Dernier message: 13/04/2010, 07h54
  5. Problème de Drag and Drop
    Par superjaja dans le forum Débuter
    Réponses: 4
    Dernier message: 16/06/2009, 09h20

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