Soalan:
Melaksanakan seret dan lepas untuk JLabel melalui acara tetikus menimpa , acara mouseReleased gagal dicetuskan apabila keluaran tetikus apabila ditakrifkan dalam acara mousePressed. Adakah sesuatu yang saya salah lakukan?"
Kod:
<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>
Jawapan:
Sementara penyelesaian @Thomas adalah betul, berikut adalah dua pendekatan alternatif untuk dipertimbangkan:
1 Menggunakan JLayeredPane:
Contoh ini menunjukkan penyeretan komponen menggunakan JLayeredPane , manakala contoh yang lebih terkini menggunakan pendekatan yang serupa.
Kod:
<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>
2 >Kod ini menunjukkan penggunaan MouseMotionListener Contoh yang lebih kompleks ini menggunakan prinsip yang sama.
Kod:
Atas ialah kandungan terperinci Adakah Kaedah MousePressed Menghalang MouseReleased daripada Mencetuskan dalam JLabel Drag and Drop?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!