Maison > Java > javaDidacticiel > le corps du texte

Comment remplacer les événements de la souris JLabel pour empêcher la consommation d'événements lors du glisser-déposer ?

Susan Sarandon
Libérer: 2024-10-24 04:50:31
original
823 Les gens l'ont consulté

How to Override JLabel Mouse Events to Prevent Event Consumption During Drag and Drop?

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

La fonctionnalité glisser-déposer peut être implémentée sur un JLabel en remplaçant ses événements de souris. Cependant, un problème survient lors de la définition du glisser-déposer dans l'événement mousePressed, car cela empêche l'événement mouseReleased de se déclencher sur le même JLabel.

Implémentation :

<code class="java">Thumbnails[I_Loop].setText("1");
Thumbnails[I_Loop].setTransferHandler(new TransferHandler("text"));
Thumbnails[I_Loop].addMouseListener(new MouseAdapter() {
    public void  mouseReleased(MouseEvent me) {
           System.out.println("here mouse released");
      }
    public void mousePressed(MouseEvent me) {
        System.out.println("here mouse pressed");
        JComponent comp = (JComponent) me.getSource();
        TransferHandler handler = comp.getTransferHandler();
        handler.exportAsDrag(comp, me, TransferHandler.COPY);
    }
});</code>
Copier après la connexion

Dans cet exemple, le L'événement mousePressed est utilisé pour lancer le processus de glisser-déposer, mais il consomme l'événement de souris et empêche le déclenchement de l'événement mouseReleased. Par conséquent, le message « ici la souris est relâchée » n'est pas imprimé.

Approches alternatives :

1. Utilisation de TransferHandler :

Comme @Thomas l'a mentionné, TransferHandler peut être utilisé pour les opérations de glisser-déposer. Il fournit des méthodes telles que exportAsDrag() pour lancer le processus de glissement.

2. Utilisation de MouseMotionListener :

Cette approche écoute les événements de glissement de la souris pour déplacer le composant plutôt que de s'appuyer sur les événements enfoncés et relâchés par la souris.

3. Utilisation de JLayeredPane :

Les composants peuvent être glissés sur un JLayeredPane à l'aide d'événements de souris. Reportez-vous aux exemples de débordement de pile liés pour plus de détails.

Code amélioré :

<code class="java">Thumbnails[I_Loop].setTransferHandler(new TransferHandler("text"));
Thumbnails[I_Loop].addMouseListener(new MouseAdapter() {
    public void  mouseReleased(MouseEvent me) {
           System.out.println("here mouse released");
      }
});
Thumbnails[I_Loop].addMouseMotionListener(new MouseMotionAdapter() {
    @Override
    public void mouseDragged(MouseEvent e) {
        int dx = e.getX() - mousePt.x;
        int dy = e.getY() - mousePt.y;
        Thumbnails[I_Loop].setBounds(Thumbnails[I_Loop].getX() + dx, Thumbnails[I_Loop].getY() + dy, Thumbnails[I_Loop].getWidth(), Thumbnails[I_Loop].getHeight());
    }
});</code>
Copier après la connexion

Cette implémentation utilise MouseMotionListener pour gérer les événements de glissement de la souris et mettre à jour la position du JLabel en conséquence. L'événement mouseReleased est maintenant déclenché et le message "ici souris relâchée" est imprimé.

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!

source:php
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!