Heim  >  Artikel  >  Java  >  Verhindert die Methode MousePressed, dass MouseReleased in JLabel Drag & Drop ausgelöst wird?

Verhindert die Methode MousePressed, dass MouseReleased in JLabel Drag & Drop ausgelöst wird?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-24 02:41:29764Durchsuche

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

JLabel-Mausereignisse für Drag & Drop

Frage:

Implementieren von Drag & Drop für ein JLabel über Mausereignisüberschreibungen , wird das Ereignis „mouseReleased“ beim Loslassen der Maus nicht ausgelöst, wenn es innerhalb des Ereignisses „mousePressed“ definiert ist. Mache ich irgendetwas falsch? ist richtig, hier sind zwei alternative Ansätze zu berücksichtigen:

1. Verwendung von JLayeredPane:

<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>
Dieses Beispiel zeigt das Ziehen einer Komponente mit JLayeredPane , während ein neueres Beispiel einen ähnlichen Ansatz verwendet.

Code:

2. Verwendung von MouseMotionListener:

Dieser Code demonstriert die Verwendung eines MouseMotionListener. Dieses komplexere Beispiel verwendet das gleiche Prinzip.

Code:

<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>

Das obige ist der detaillierte Inhalt vonVerhindert die Methode MousePressed, dass MouseReleased in JLabel Drag & Drop ausgelöst wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn