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

Composants Java Discussion :

Drag & Drop entre JList et JPanel


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Drag & Drop entre JList et JPanel
    Bonjour à tous !

    Voilà j'espère poster dans la bonne section, j'aimerais mettre en œuvre dans mon application composée de 2 fenêtres ( 1 qui contient uniquement un objet JList et l'autre qui ne contient uniquement un JPanel ) un Drag & Drop d'un élément de la JList vers le JPanel sous forme d'icône. Après avoir passé 2H à chercher sur notre ami google je fais choux blanc. Si quelqu'un à une idée sur le comment merci d'avance.

    Cordialement.

  2. #2
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    salut,

    voici un petit exemple, il y a une jframe qui contient une jlist et une jpanel, la liste contient une liste de chemins d'images. quand tu drag une élément de la liste et tu le drop dans le jpanel, on ajoute un jlabel au jpanel qui a comme icone l'image qui correspond à l'élément de la liste

    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
     
    import javax.swing.*;
    import java.awt.dnd.*;
    import java.awt.*;
    import java.awt.datatransfer.*;
     
    public class TestDnd
    {
    	public static void main(String[] args)
    	{
    		final JPanel panel = new JPanel(new FlowLayout());
    		panel.setDropTarget(new DropTarget()
    		{
    			public void drop(DropTargetDropEvent dtde) 
    			{
    				try{
    					String img = (String)dtde.getTransferable().getTransferData(DataFlavor.stringFlavor);
    					panel.add(new JLabel(new ImageIcon(img)));
    					panel.revalidate();
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    		String[] imgs = {"img1.png", "img2.png", "img3.png", "img4.png"};
    		JList list = new JList(imgs);
    		list.setDragEnabled(true);
    		JFrame frm = new JFrame();
    		frm.add(list, BorderLayout.NORTH);
    		frm.add(panel, BorderLayout.CENTER);
    		frm.setSize(400, 400);
    		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frm.setVisible(true);
    	}
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Merci Herch c'est exactement ce qu'il me fallait, par contre petite question, peut on ajouter plusieurs image (ce que l'on ne peut faire avec ce code) sur le jPanel ?

    Cordialement.

  4. #4
    Membre éclairé Avatar de herch
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    655
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 655
    Points : 773
    Points
    773
    Par défaut
    plusieurs images??
    j'ai pas compris ta question!!
    est-ce que tu veux parler d'une multi-sélection dans le jlist??

    ---------------------------------------

    bon, je suppose que tu parles du cas d'une multi-sélection dans la liste.

    il faudra modifier le code en spécifiant un TransferHandler pour la JList, c'est cette classe qui gére les données à transférer lors du drag et la façon de les transférer.

    le principe c'est que lors du drag, on crée un objet Transferable (StringSelection) qui contient les valeurs de tous les éléments séléctionnés de la liste, et c'est cet objet qu'on transférera au jpanel.

    voici le code modifié

    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
     
    import javax.swing.*;
    import java.awt.dnd.*;
    import java.awt.*;
    import java.awt.datatransfer.*;
     
    public class TestDnd
    {
    	public static void main(String[] args)
    	{
    		final JPanel panel = new JPanel(new FlowLayout());
    		panel.setDropTarget(new DropTarget()
    		{
    			public void drop(DropTargetDropEvent dtde) 
    			{
    				try{
    					String imgs = (String)dtde.getTransferable().getTransferData(DataFlavor.stringFlavor);
    					String[] listImgs = imgs.split(";");
    					for (int i = 0; i < listImgs.length; i++)
    						panel.add(new JLabel(new ImageIcon(listImgs[i])));
    					panel.revalidate();
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    		String[] imgs = {"img1.png", "img2.png", "img3.png", "img4.png"};
    		JList list = new JList(imgs);
    		list.setTransferHandler(new TransferHandler()
    		{
    			protected Transferable createTransferable(JComponent c)
    			{
    				JList list = (JList)c;
    				StringBuffer images = new StringBuffer();
    				Object[] selectedValues = list.getSelectedValues();
    				for (int i = 0; i < selectedValues.length; i++)
    				{
    					images.append(selectedValues[i] + ";");
    				}
    				return new StringSelection(images.toString());
    			}
    			public int getSourceActions(JComponent c)
    			{
    				return TransferHandler.COPY;
    			}
    		});
    		list.setDragEnabled(true);
    		JFrame frm = new JFrame();
    		frm.add(list, BorderLayout.NORTH);
    		frm.add(panel, BorderLayout.CENTER);
    		frm.setSize(400, 400);
    		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frm.setVisible(true);
    	}
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Excuse moi Herch c'est moi qui est fait une erreur, hier j'ai mal reprit ton code et je pouvais ajouter sur le JPanel qu'un seul JLabel :/ Donc ton code est parfaitement fonctionnel excuse moi

    Cordialement.

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

Discussions similaires

  1. (jlist,jtree) drag and drop entre 2 jlist vers un jtree
    Par olivier57b dans le forum Composants
    Réponses: 0
    Dernier message: 17/04/2012, 16h20
  2. Drag ans Drop entre deux JList
    Par aeMAETH dans le forum Débuter
    Réponses: 3
    Dernier message: 13/12/2009, 19h25
  3. Drag and Drop entre JList et JTree
    Par bellemlih dans le forum Composants
    Réponses: 7
    Dernier message: 25/02/2008, 12h14
  4. [FLASH MX2004] Drag and drop entre deux List
    Par aldo-tlse dans le forum Flash
    Réponses: 15
    Dernier message: 24/09/2005, 01h10
  5. Drag and Drop entre listbox
    Par zwoke dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/07/2004, 14h10

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