Rumah > Java > javaTutorial > Adakah Kaedah MousePressed Menghalang MouseReleased daripada Mencetuskan dalam JLabel Drag and Drop?

Adakah Kaedah MousePressed Menghalang MouseReleased daripada Mencetuskan dalam JLabel Drag and Drop?

Mary-Kate Olsen
Lepaskan: 2024-10-24 02:41:29
asal
853 orang telah melayarinya

Does MousePressed Method Inhibit MouseReleased from Triggering in JLabel Drag and Drop?

Acara Tetikus JLabel untuk Seret dan Lepas

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

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

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!

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