Peristiwa Tetikus JLabel untuk Seret dan Lepas
Menggunakan acara tetikus dengan JLabel membenarkan fungsi seret dan lepas, tetapi ia boleh menyebabkan isu di mana mouseReleased tidak berfungsi seperti yang diharapkan apabila seret dan lepas ditakrifkan dalam acara mousePressed.
Untuk memahami masalah, adalah penting untuk ambil perhatian bahawa apabila mentakrifkan fungsi seret dan lepas dalam mousePressed, ia memulakan pemindahan proses. Ini bermakna bahawa sebarang peristiwa berikutnya, termasuk mouseReleased, mungkin tidak diproses seperti yang diharapkan.
Dalam kod yang disediakan:
<code class="java"> public void mousePressed(MouseEvent me) { ... handler.exportAsDrag(comp, me, TransferHandler.COPY); }</code>
Panggilan exportAsDrag memulakan operasi seret dan lepas, yang dengan berkesan diutamakan daripada acara tetikus yang lain. Akibatnya, peristiwa seterusnya seperti mouseReleased, yang memerlukan penyempurnaan operasi seret dan lepas, tidak dicetuskan.
Alternatif:
Dua pendekatan alternatif boleh selesaikan isu ini:
Gunakan MouseMotionListener:
<code class="java"> addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { // Handle drag operation } });</code>
Pendekatan ini memisahkan operasi seretan daripada penekan butang, membenarkan mouseReleased berfungsi seperti yang dijangkakan.
Gunakan JComponent.setTransferHandler dan mulakan drag-and-drop dalam tetikusDilepaskan:
<code class="java"> setTransferHandler(new TransferHandler("text")); addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { if (e.isControlDown()) { getTransferHandler().exportAsDrag(this, e, TransferHandler.COPY); } } });</code>
Di sini, pengendali pemindahan ialah ditetapkan pada JLabel, dan operasi seret dimulakan hanya apabila kekunci Kawalan ditekan semasa mouseReleased, membenarkan mouseReleased berfungsi seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimana untuk Memastikan Acara MouseReleased Berfungsi untuk JLabel Drag-and-Drop di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!