Maison  >  Article  >  Java  >  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
Mary-Kate Olsenoriginal
2024-10-24 02:41:29764parcourir

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>

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>

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