Frage:
Implementieren von Drag & Drop für ein JLabel über Mausereignisüberschreibungen , wird das Ereignis „mouseReleased“ beim Loslassen der Maus nicht ausgelöst, wenn es innerhalb des Ereignisses „mousePressed“ definiert ist. Mache ich irgendetwas falsch? ist richtig, hier sind zwei alternative Ansätze zu berücksichtigen:
1. Verwendung von JLayeredPane:
<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>
Code:
2. Verwendung von MouseMotionListener:
Dieser Code demonstriert die Verwendung eines MouseMotionListener. Dieses komplexere Beispiel verwendet das gleiche Prinzip.
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>
Das obige ist der detaillierte Inhalt vonVerhindert die Methode MousePressed, dass MouseReleased in JLabel Drag & Drop ausgelöst wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!