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!