2013-08-15 5 views
9

Mein Ziel war es, diesen Code zu vereinfachen (alles funktioniert gut):MouseAdapter-Methoden - warum `mouseDragged`,` mouseMoved` und `mouseWheelMoved` enthalten?

package test; 

import java.awt.Window; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import javax.swing.JWindow; 

public class A extends JWindow implements MouseListener, MouseMotionListener { 

    public A() { 
     addMouseListener(A.this); 
     addMouseMotionListener(A.this); 
    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
    } 

    @Override 
    public void mousePressed(MouseEvent e) { 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
    } 

    @Override 
    public void mouseEntered(MouseEvent e) { 
    } 

    @Override 
    public void mouseExited(MouseEvent e) { 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
    } 
} 

Aber wenn ich entscheiden MouseAdapter wie diese verwenden:

addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent e) { 
     transferFocusBackward(); 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, not working anymore 
    } 
}); 

mouseDragged keine Ereignisse zu empfangen. Aber wenn ich MouseMotionListener wie folgt hinzu:

addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent e) { 
     //This method is being used, working fine 
    } 
}); 

addMouseMotionListener(new MouseMotionAdapter() { 
    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, working fine 
    } 
}); 

Dann ist alles sichert normal. Also meine Frage ist - was ist der Zweck von mouseDragged, mouseMoved und mouseWheelMoved Methoden in MouseAdapter Klasse, wenn sie nicht funktionieren?

+3

Sie müssen Ihr 'MouseAdapter' mit' addMouseMotionListener' hinzufügen, wenn es auf Mausbewegungsereignisse warten soll. – Vulcan

+0

Warten ... was? Ich habe nicht bemerkt, dass sie dies in Java 6 geändert haben, da ich immer noch mit Java 5 arbeite, wo 'MouseAdapter' * nur 'MouseListener' implementiert. Als nächstes sagst du mir, dass sie 'SwingWorker' verbessert haben. Ha, ja richtig. – splungebob

Antwort

9

OK, ich glaube, ich verstehe jetzt: in MouseAdapter Klasse Dokumentation, dass „ein Listener-Objekt erstellen die erweiterte Klasse verwenden und es dann mit einer Komponente registriert die addMouseListener der Komponente verwenden, addMouseMotionListener, addMouseWheelListener Methoden“ gesagt wird. So, jetzt sieht es so aus:

private class MouseListeners extends MouseAdapter { 

    @Override 
    public void mousePressed(MouseEvent e) { 
     //This method is being used, working fine 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     //This method is being used, working fine 
    } 
} 

und dann:

MouseListeners listeners = new MouseListeners(); 
addMouseListener(listeners); 
addMouseMotionListener(listeners); 

Jetzt ist alles in Ordnung ist.

+0

Gute Arbeit. Vergessen Sie nicht, Ihre eigene Antwort als akzeptiert zu markieren. – Vulcan

+0

+1 interessanter Fortschritt :-), zweites Mal in dieser Woche kann ich hier so etwas wie == Ich lese docs – mKorbel

Verwandte Themen