Maison > Java > javaDidacticiel > Comment garantir que l'événement MouseReleased fonctionne pour le glisser-déposer JLabel en Java ?

Comment garantir que l'événement MouseReleased fonctionne pour le glisser-déposer JLabel en Java ?

Mary-Kate Olsen
Libérer: 2024-10-24 00:26:02
original
791 Les gens l'ont consulté

How to Ensure MouseReleased Event Works for JLabel Drag-and-Drop in Java?

Événements de souris JLabel pour le glisser-déposer

L'utilisation d'événements de souris avec un JLabel permet la fonctionnalité glisser-déposer, mais cela peut conduire à problèmes où mouseReleased ne fonctionne pas comme prévu lorsque le glisser-déposer est défini dans l'événement mousePressed.

Pour comprendre le problème, il est important de noter que lors de la définition de la fonctionnalité glisser-déposer dans mousePressed, il lance le transfert processus. Cela signifie que tous les événements ultérieurs, y compris mouseReleased, peuvent ne pas être traités comme prévu.

Dans le code fourni :

<code class="java">            public void mousePressed(MouseEvent me) {
                ...
                handler.exportAsDrag(comp, me, TransferHandler.COPY);
            }</code>
Copier après la connexion

L'appel de exportAsDrag démarre l'opération de glisser-déposer, ce qui effectivement a priorité sur les autres événements de la souris. Par conséquent, les événements ultérieurs comme mouseReleased, qui nécessitent l'achèvement de l'opération glisser-déposer, ne sont pas déclenchés.

Alternatives :

Deux approches alternatives peuvent résoudre ce problème :

  1. Utilisez un MouseMotionListener:

    <code class="java">     addMouseMotionListener(new MouseMotionAdapter() {
             @Override
             public void mouseDragged(MouseEvent e) {
                 // Handle drag operation
             }
         });</code>
    Copier après la connexion

    Cette approche dissocie l'opération de glisser de la pression sur le bouton, permettant à mouseReleased de fonctionner comme prévu.

  2. Utilisez JComponent.setTransferHandler et démarrez le glisser-déposer dans mouseReleased :

    <code class="java">     setTransferHandler(new TransferHandler("text"));
    
         addMouseListener(new MouseAdapter() {
             @Override
             public void mouseReleased(MouseEvent e) {
                 if (e.isControlDown()) {
                     getTransferHandler().exportAsDrag(this, e, TransferHandler.COPY);
                 }
             }
         });</code>
    Copier après la connexion

    Ici, le gestionnaire de transfert est défini sur le JLabel, et l'opération de glisser est lancée uniquement lorsque la touche Contrôle est enfoncée pendant mouseReleased, permettant à mouseReleased de fonctionner comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal