Maison >Java >javaDidacticiel >Comment garantir que l'événement MouseReleased fonctionne pour le glisser-déposer JLabel en 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 :
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.
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!