Maison  >  Article  >  Java  >  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
Mary-Kate Olsenoriginal
2024-10-24 00:26:02676parcourir

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>

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>

    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>

    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:
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