Rumah > Java > javaTutorial > Bagaimana untuk Memastikan Acara MouseReleased Berfungsi untuk JLabel Drag-and-Drop di Java?

Bagaimana untuk Memastikan Acara MouseReleased Berfungsi untuk JLabel Drag-and-Drop di Java?

Mary-Kate Olsen
Lepaskan: 2024-10-24 00:26:02
asal
770 orang telah melayarinya

How to Ensure MouseReleased Event Works for JLabel Drag-and-Drop in Java?

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>
Salin selepas log masuk

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:

  1. Gunakan MouseMotionListener:

    <code class="java">     addMouseMotionListener(new MouseMotionAdapter() {
             @Override
             public void mouseDragged(MouseEvent e) {
                 // Handle drag operation
             }
         });</code>
    Salin selepas log masuk

    Pendekatan ini memisahkan operasi seretan daripada penekan butang, membenarkan mouseReleased berfungsi seperti yang dijangkakan.

  2. 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>
    Salin selepas log masuk

    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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan