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 liste de boutons


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Par défaut Drag & Drop liste de boutons
    Bonjour,

    Je code actuellement une interface graphique avec Swing et j'utilise le Drag & Drop.
    J'ai fait une liste de boutons et je voudrais que quand j'en drag & drop un, le bouton en question disparaisse de la liste.

    Savez-vous comment je peux faire ça?

    Merci !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 86
    Par défaut
    Hello DarkCator ,

    Il faut éclaircir certaines choses :

    Qu'est ce que tu entends par :
    Citation Envoyé par DarkCator Voir le message
    Bonjour,
    J'ai fait une liste de boutons !
    Est ce que c'est une liste qu'on voit graphiquement (Des boutons qui se suivent dans un JPanel) ou une List (une collection genre ArrayList)?

    Citation Envoyé par DarkCator Voir le message
    Bonjour,
    je voudrais que quand j'en drag & drop un, le bouton en question disparaisse de la liste.
    Merci !
    Ton gliser/Déposer tu le fais de où à où ? Tu prends un bouton et tu dépose ailleur? Tu veux le réaficher dans le conteur de destination?

    Awane

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Par défaut
    Oui désolée j'ai pas été claire.

    Quand je dis liste je parle d'une liste dans un JPanel, c'est à dire une suite de boutons en fait.
    Et en fait les boutons je les pose sur carte genre googlemaps, ils sont censés donc apparaître sur la carte lors du drop et disparaître de la "liste".

  4. #4
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 86
    Par défaut
    Hello DarkCator ,

    Là c'est plus clair

    Pour pouvoir glisser-déposer ton bouton sur un panel, ton bouton doit être transferable (Implémentation de l'interface Transferable), ton panel de destination doit implémenter DropTargetListener ou utiliser DropTargetAdapter pour détecter le Drop .

    Concernant l'écouteur du Drag, soit c'est ton panel source qui l’implémente, soit ton bouton lui même.

    Pour supprimer ton bouton du panel source, tu doit intercepter la notification de la fin du Drop dans la méthode dragDropEnd et puis le supprimer du conteneur parent.

    Je vais te poster un petit exemple à améliorer (Je ne vais quand même pas tout faire ) qui vas au moins te donner une piste pour avancer :


    Le bouton :
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    import java.awt.Container;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.awt.dnd.DnDConstants;
    import java.awt.dnd.DragGestureEvent;
    import java.awt.dnd.DragGestureListener;
    import java.awt.dnd.DragSource;
    import java.awt.dnd.DragSourceDragEvent;
    import java.awt.dnd.DragSourceDropEvent;
    import java.awt.dnd.DragSourceEvent;
    import java.awt.dnd.DragSourceListener;
    import java.io.IOException;
     
    import javax.swing.JButton;
     
    public class MonBoutton extends JButton implements Transferable, DragGestureListener, DragSourceListener{
     
    	private static final long serialVersionUID = 1L;
     
    	private final DataFlavor darafFlavor = new DataFlavor(JButton.class, "JButton");
    	private final DataFlavor[] flavors = new DataFlavor[]{darafFlavor};
     
    	private final DragSource source;
     
    	public MonBoutton(String text) {
    		super(text);
    		source = new DragSource();
    		source.createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_MOVE, this);
    	}
     
    	@Override
    	public DataFlavor[] getTransferDataFlavors() {
    		return flavors;
    	}
     
    	@Override
    	public boolean isDataFlavorSupported(DataFlavor flavor) {
    		boolean supported = false;
    		for (DataFlavor d : getTransferDataFlavors()) {
    			if (d.equals(flavor)) {
    				supported = true;
    				break;
    			}
    		}
    		return supported;
    	}
     
    	@Override
    	public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
    		Object data = null;
    		if (isDataFlavorSupported(flavor)) {
    			data = this;
    		} else {
    			throw new UnsupportedFlavorException(flavor);
    		}
    		return data;
    	}
     
    	@Override
    	public void dragDropEnd(DragSourceDropEvent dsde) {
    		Container parent = getParent();
    		if (dsde.getDropSuccess() && getParent() != null) {
    			parent.remove(this);
    			parent.repaint();
    			parent.validate();
    		}
    	}
     
    	@Override
    	public void dragGestureRecognized(DragGestureEvent dge) {
    		source.startDrag(dge, DragSource.DefaultMoveDrop,this, this);     
    	}
     
    	@Override
    	public void dragEnter(DragSourceDragEvent dsde) {
    	}
     
    	@Override
    	public void dragOver(DragSourceDragEvent dsde) {
    	}
     
    	@Override
    	public void dropActionChanged(DragSourceDragEvent dsde) {
    	}
     
    	@Override
    	public void dragExit(DragSourceEvent dse) {
    	}
     
    }
    Le panel source :
    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
     
    import javax.swing.BoxLayout;
    import javax.swing.JPanel;
     
    public class SourcePanel extends JPanel {
     
    	private static final long serialVersionUID = 1L;
     
    	public SourcePanel() {
    		MonBoutton button1 = new MonBoutton("Pos 1");
    		MonBoutton button2 = new MonBoutton("Pos 2");
    		MonBoutton button3 = new MonBoutton("Pos 3");
    		MonBoutton button4 = new MonBoutton("Pos 4");
     
    		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    		add(button1);
    		add(button2);
    		add(button3);
    		add(button4);
    	}
    }
    Le panel de destination:
    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
     
    import java.awt.Color;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.Transferable;
    import java.awt.dnd.DropTarget;
    import java.awt.dnd.DropTargetAdapter;
    import java.awt.dnd.DropTargetDropEvent;
     
    import javax.swing.JPanel;
    import javax.swing.border.LineBorder;
     
    public class DestinationPanel extends JPanel {
     
    	private static final long serialVersionUID = 1L;
     
    	public DestinationPanel() {
    		DropTargetAdapter dropTargetAdapter = new DropTargetAdapter() {
    			@Override
    			public void drop(DropTargetDropEvent dtde) {
    				Transferable tr = dtde.getTransferable();
    				DataFlavor[] daraFlavors = tr.getTransferDataFlavors();
    				try {
    					if (tr.isDataFlavorSupported(daraFlavors[0])) {
    						MonBoutton monBoutton = (MonBoutton) tr.getTransferData(daraFlavors[0]);
    						add(monBoutton);
    						dtde.dropComplete(true);
    						return;
    					}
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		};
    		new DropTarget(this, dropTargetAdapter);
    		setBorder(new LineBorder(Color.red));
    	}
    }
    La classe de Test :
    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
     
    import java.awt.BorderLayout;
     
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
     
    public class TestDragDrop {
     
    	private final JFrame f = new JFrame("Test Drag & Drop");
     
    	public TestDragDrop() {
     
    		DestinationPanel cartePanel = new DestinationPanel();
    		SourcePanel panelListBoutton = new SourcePanel();
     
    		f.getContentPane().add(panelListBoutton, BorderLayout.WEST );
    		f.getContentPane().add(cartePanel, BorderLayout.CENTER );
    		f.setSize(500, 300);
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		SwingUtilities.invokeLater(new Runnable() {
    			@Override
    			public void run() {
    				f.setVisible(true);
    			}
    		});
    	}
     
     
    	public static void main(String[] args) {
    		new TestDragDrop();
    	}
    }
    Voilà, j'espère ça va t'aider.
    Bonne soirée

    Awane

Discussions similaires

  1. [jQuery 1.6.2] Drag'n'Drop listes
    Par SpYd3r dans le forum jQuery
    Réponses: 1
    Dernier message: 28/07/2011, 08h23
  2. Drag And drop liste sortable
    Par toma03 dans le forum jQuery
    Réponses: 1
    Dernier message: 26/07/2011, 10h57
  3. Drag and drop d'un bouton
    Par Lady dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/03/2007, 14h35
  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

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