Kefungsian Seret dan Lepas dengan Pengendalian Acara Tetikus Tersuai untuk JLabels
Anda berusaha untuk melaksanakan fungsi seret dan lepas dengan mengatasi acara tetikus pada JLabel tatasusunan bernama "Lakaran kecil." Walau bagaimanapun, anda telah memerhatikan bahawa pengendali acara yang dilepaskan tetikus tidak dicetuskan selepas mentakrifkan seret dan lepas dalam pengendali acara ditekan tetikus.
Memahami Isu
Dalam senario khusus ini, peristiwa pelepasan tetikus tidak didaftarkan kerana operasi seret dan lepas memintas peristiwa tetikus. Apabila anda menggunakan kaedah exportAsDrag dalam pengendali tetikusPressed, ia memulakan operasi seret, memakan peristiwa tetikus berikutnya dalam operasi yang sama.
Penyelesaian
Untuk menyelesaikan masalah ini, anda boleh mengalihkan logik seret dan lepas ke pengendali acara tetikusDragged yang berasingan. Ini memastikan acara pelepasan tetikus boleh dikendalikan secara bebas.
Kod Disemak:
<code class="java">Thumbnails[I_Loop].addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { JComponent comp = (JComponent) me.getSource(); TransferHandler handler = comp.getTransferHandler(); } @Override public void mouseReleased(MouseEvent me) { System.out.println("here mouse released"); } }); Thumbnails[I_Loop].addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent me) { JComponent comp = (JComponent) me.getSource(); TransferHandler handler = comp.getTransferHandler(); handler.exportAsDrag(comp, me, TransferHandler.COPY); } });</code>
Dengan mengasingkan fungsi seret dan lepas ke dalam pengendali Dragged tetikus khusus, anda boleh mengekalkan gelagat yang diingini dan memastikan peristiwa pelepasan tetikus dikendalikan dengan betul untuk tatasusunan JLabel anda.
Nota Tambahan:
Atas ialah kandungan terperinci Bagaimana untuk Mendayakan Pengendalian Acara MouseRelease Selepas Seret dan Lepas pada JLabel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!