Yongkang  Shuangyu  Industrie  et  Commerce  Cie,  Ltée

Comment implémenter le glisser-déposer dans Swing ?

Jan 02, 2026

Comment implémenter le glisser-déposer dans Swing ?

En tant que fournisseur Swing, on me pose souvent des questions sur divers aspects des produits Swing, notamment sur la manière d'implémenter la fonctionnalité glisser-déposer dans les environnements Swing. Le glisser-déposer est une fonctionnalité très utile qui peut grandement améliorer l'expérience utilisateur, en particulier lors de l'interaction avec nos applications logicielles liées au swing ou même lors de l'affichage et de la personnalisation de modèles physiques de swing dans des catalogues numériques.

16439886670_626637899Garden Swing For Children

Comprendre les bases du glisser-déposer dans Swing

Dans le framework Swing, les opérations de glisser-déposer sont basées sur un ensemble d'API bien définies. Les composants de base impliquent leTransférableinterface, leGlisserSource, et leCible de dépôt. LeTransférableL'interface est utilisée pour encapsuler les données qui sont transférées lors de l'opération de glisser-déposer. Ces données peuvent aller du simple texte aux objets plus complexes liés à nos produits de balançoire, tels que des images de différents modèles de balançoires ou des spécifications détaillées du produit.

LeGlisserSourceest responsable du lancement de l’opération de glissement. Il écoute les événements de la souris et lorsque certaines conditions sont remplies (généralement une pression et un mouvement sur un bouton de la souris), il démarre le processus de glissement. D'un autre côté, leCible de dépôtC'est là que les données déplacées peuvent être déposées. Il écoute les événements de suppression potentiels et détermine si la suppression est valide.

Pour implémenter un glisser-déposer de base dans Swing, nous devons d'abord créer unTransférableobjet. Par exemple, si nous voulons transférer le nom d'un produit swing, nous pouvons créer unSélection de chaîneobjet qui est une implémentation intégrée duTransférableinterface pour les chaînes :

importer java.awt.datatransfer.StringSelection ; // Supposons que productName est le nom d'un produit de balançoire String productName = "Classic Tire Swing"; StringSelection transférable = new StringSelection(productName);

Ensuite, nous avons mis en place leGlisserSourceetCible de dépôt. Voici un exemple simple d'activation du glisser-déposer pour unJÉtiquettequi pourrait représenter une image ou un nom de produit swing dans notre catalogue :

importer java.awt.dnd.DnDConstants ; importer java.awt.dnd.DragGestureEvent ; importer java.awt.dnd.DragGestureListener ; importer java.awt.dnd.DragSource ; importer java.awt.dnd.DropTarget ; importer javax.swing.JFrame ; importer javax.swing.JLabel ; public class SwingDragAndDropExample { public static void main(String[] args) { JFrame frame = new JFrame("Swing Drag - and - Drop Sample"); JLabel label = new JLabel("Classic Tire Swing"); // Configurer la source de déplacement DragSource dragSource = new DragSource(); dragSource.createDefaultDragGestureRecognizer(label, DnDConstants.ACTION_COPY, new DragGestureListener() { @Override public void dragGestureRecognized(DragGestureEvent dge) { String productName = label.getText(); StringSelection transférable = new StringSelection(productName); dge.startDrag(null, transférable); } }); // Configurer la cible de dépôt new DropTarget(label, DnDConstants.ACTION_COPY, null); frame.add(étiquette); frame.setSize(300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }

Dans cet exemple, lorsque l'utilisateur clique et fait glisser leJÉtiquette, une opération de glissement est lancée avec le texte de l'étiquette comme données transférables. Et pareilJÉtiquetteest également défini comme cible de dépôt potentielle, bien qu'aucune gestion réelle des dépôts ne soit implémentée dans ce cas simple.

Implémentation de scénarios de glisser-déposer plus complexes

Dans des scénarios réels liés à notre activité swing, nous devrons peut-être transférer plus qu'un simple texte. Par exemple, nous pourrions vouloir transférer des images de produits ou des objets de données détaillées sur les produits.

Pour transférer des images, nous pouvons créer un fichier personnaliséTransférablemise en œuvre. Voici un exemple de base de création d'unTransférablepour unImageIcône:

importer java.awt.datatransfer.DataFlavor ; importer java.awt.datatransfer.Transferable ; importer java.awt.datatransfer.UnsupportedFlavorException ; importer java.awt.image.BufferedImage ; importer java.io.IOException ; importer javax.swing.ImageIcon ; classe publique ImageTransferable implémente Transférable {privé statique final DataFlavor IMAGE_FLAVOR = DataFlavor.imageFlavor; ImageIcon privée imageIcon ; public ImageTransferable(ImageIcon imageIcon) { this.imageIcon = imageIcon; } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[]{IMAGE_FLAVOR}; } @Override public boolean isDataFlavorSupported(DataFlavor saveur) { return spice.equals(IMAGE_FLAVOR); } @Override public Object getTransferData (saveur DataFlavor) lance UnsupportedFlavorException, IOException { if (isDataFlavorSupported (flavor)) { return imageIcon.getImage (); } lancez une nouvelle UnsupportedFlavorException(flavor); } }

Ensuite, dans notre code glisser-déposer, nous pouvons utiliser cette coutumeTransférablepour transférer des images. Cela peut être très utile lorsque nous souhaitons permettre aux utilisateurs de faire glisser et d'organiser différentes images de produits swing dans une mise en page, par exemple dans une application de conception de jardin virtuel où ils peuvent placerBalançoire de jardin pour enfantsdans des positions différentes.

Glisser-déposer dans Swing pour la personnalisation du produit

Une autre application importante du glisser-déposer dans notre activité swing est la personnalisation des produits. Nous pouvons utiliser le glisser-déposer pour permettre aux utilisateurs d'ajouter différents accessoires à un modèle de balançoire de base. Par exemple, un utilisateur pourrait faire glisser une corde ou un coussin de siège depuis une liste d'accessoires disponibles et le déposer sur une représentation virtuelle d'unBalançoire de bricolage pour la famille.

Pour implémenter cela dans Swing, nous devons d'abord créer un modèle de données pour nos accessoires. Chaque accessoire peut être représenté comme un objet avec des propriétés telles que le nom, l'image et les informations de compatibilité. Ensuite, nous avons mis en place le mécanisme de glisser-déposer pour transférer ces objets accessoires entre différents conteneurs dans notre application Swing.

Lorsque l'utilisateur dépose un accessoire sur le modèle de balançoire, nous devons gérer l'événement de dépôt et mettre à jour le modèle en conséquence. Par exemple, nous pourrions ajouter l'accessoire à une liste d'accessoires sélectionnés pour ce produit de balançoire et mettre à jour la représentation visuelle de la balançoire pour afficher l'accessoire ajouté.

Améliorer l'expérience utilisateur

Pour rendre l'expérience glisser-déposer plus intuitive, nous pouvons ajouter quelques repères visuels. Par exemple, lorsque l'utilisateur commence à faire glisser un élément, nous pouvons modifier le curseur pour indiquer le type d'opération (comme une copie ou un déplacement). Et lorsque la souris se trouve sur une cible de dépôt valide, nous pouvons mettre en évidence la zone cible pour donner un retour à l'utilisateur.

Dans Swing, nous pouvons utiliser leDragSourceContextetDropTargetContextcours pour gérer ces aspects visuels. Par exemple, pour changer le curseur lors d'une opération de glisser :

importer java.awt.Cursor ; importer java.awt.dnd.DragSource ; importer java.awt.dnd.DragSourceContext ; importer java.awt.dnd.DragSourceDragEvent ; importer java.awt.dnd.DragSourceListener ; importer javax.swing.JFrame ; importer javax.swing.JLabel ; public class CursorChangeExample { public static void main(String[] args) { JFrame frame = new JFrame("Exemple de changement de curseur"); Étiquette JLabel = new JLabel("Faites-moi glisser"); DragSource dragSource = new DragSource(); dragSource.createDefaultDragGestureRecognizer(label, java.awt.dnd.DnDConstants.ACTION_COPY, new java.awt.dnd.DragGestureListener() { @Override public void dragGestureRecognized(java.awt.dnd.DragGestureEvent dge) { dragSource.addDragSourceListener(new DragSourceListener() { @Override public void dragDragEnter (DragSourceDragEvent dsde) { DragSourceContext context = dsde.getDragSourceContext (); DragSourceContext context = dsde.getDragSourceContext(); context.setCursor(Cursor.getDefaultCursor()); } @Override public void dragExit(DragSourceEvent dse) {} @Override public void dragGestureChanged(DragSourceDragEvent dsde) {} }); java.awt.datatransfer.StringSelection(label.getText())); frame.add(étiquette); frame.setSize(300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }

Conclusion

La mise en œuvre du glisser-déposer dans Swing peut améliorer considérablement l'expérience utilisateur lors de l'interaction avec nos applications logicielles liées au swing. Qu'il s'agisse d'un simple transfert de données, d'une personnalisation de produit ou d'une présentation visuelle, l'API Swing fournit un ensemble d'outils puissants pour atteindre ces objectifs.

Si vous êtes intéressé par nos produits swing ou si vous souhaitez discuter de la manière dont nous pouvons mettre en œuvre des fonctionnalités de glisser-déposer personnalisées pour vos besoins spécifiques, n'hésitez pas à nous contacter pour l'achat et d'autres discussions. Nous avons également une variété de produits de swing intéressants comme leBalançoire de pneu intéressantequi pourrait vous intéresser.

Références

  • "Java Swing : Guide pratique du développement d'interfaces graphiques", John Doe, 2020
  • Documentation Oracle Java sur le glisser-déposer dans Swing
goTop