Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mendayakan Pengendalian Acara MouseRelease Selepas Seret dan Lepas pada JLabel?

Bagaimana untuk Mendayakan Pengendalian Acara MouseRelease Selepas Seret dan Lepas pada JLabel?

Barbara Streisand
Barbara Streisandasal
2024-10-23 22:07:30556semak imbas

How to Enable MouseRelease Event Handling After Drag and Drop on JLabel?

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:

  • Pertimbangkan untuk menggunakan pelaksanaan Boleh Dipindahkan untuk mentakrifkan data yang dipindahkan semasa operasi seret dan lepas.
  • Teroka pilihan tambahan untuk fungsi seret dan lepas, seperti menggunakan JLayeredPane atau MouseMotionListener.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn