Maison > Java > javaDidacticiel > La méthode MousePressed empêche-t-elle MouseReleased de se déclencher dans le glisser-déposer JLabel ?

La méthode MousePressed empêche-t-elle MouseReleased de se déclencher dans le glisser-déposer JLabel ?

Mary-Kate Olsen
Libérer: 2024-10-24 02:41:29
original
940 Les gens l'ont consulté

Does MousePressed Method Inhibit MouseReleased from Triggering in JLabel Drag and Drop?

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

Question :

Implémentation du glisser-déposer pour un JLabel via des remplacements d'événements de souris , l'événement mouseReleased ne se déclenche pas lors du relâchement de la souris lorsqu'il est défini dans l'événement mousePressed. Est-ce que je fais quelque chose de mal ?"

Code :

<code class="java">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

Réponse :

Pendant que la solution de @Thomas est correct, voici deux approches alternatives à considérer :

1. Utilisation de JLayeredPane :

Cet exemple montre le déplacement d'un composant à l'aide de JLayeredPane. Cette variante développe le même concept. , tandis qu'un exemple plus récent utilise une approche similaire.

Code :

<code class="java">// ...
private Point mousePt;
private Point dragPt;
private Rectangle bounds;

public MouseDragTest() {
    this.addMouseMotionListener(new MouseMotionAdapter() {

        @Override
        public void mouseDragged(MouseEvent e) {
            int dx = e.getX() - mousePt.x;
            int dy = e.getY() - mousePt.y;
            dragPt.setLocation(dragPt.x + dx, dragPt.y + dy);
            super.mouseDragged(e);
        }
    });
    this.addMouseListener(new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent e) {
            bounds = getBounds();
            Point p = SwingUtilities.convertPoint(this, e.getPoint(), Bounds.Parent);
            if (bounds.contains(p)) {
                dragPt = p;
                mousePt = e.getPoint();
            }
        }
    });
    // ...
}</code>
Copier après la connexion

Utilisation de MouseMotionListener :

Ce code démontre l'utilisation d'un MouseMotionListener. Cet exemple plus complexe utilise le même principe.

Code :

.

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