2011-04-07 15 views
11

mouseDragged क्यों हैं 0-
का उपयोग करते समय केवल MouseAdapter का उपयोग करते समय प्राप्त होते हैं?MouseAdapter का उपयोग करते समय माउस ड्रैग किए गए ईवेंट क्यों नहीं प्राप्त किए जाते हैं?

जावा में माउस-इवेंट प्राप्त करने के लिए दो अमूर्त एडाप्टर कक्षाएं हैं;
MouseAdapter और MouseMotionAdapter

दोनों वर्गों एक mouseDragged(MouseEvent e) -method है, लेकिन
MouseAdapter में एक काम करने के लिए प्रतीत नहीं होता है; mouseDragged -events
कभी भी इस के साथ नहीं मिलता है।

दोनों वर्गों MouseMotionListener -interface जो
को परिभाषित करता है mouseDragged -event लागू है, तो मुझे समझ नहीं आता क्यों यह
है उन दोनों पर सही ढंग से काम नहीं कर रहा।

यहाँ नमूना कोड जो इस मुद्दे से पता चलता है:

import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 
import javax.swing.JFrame; 

public class SwingApp extends JFrame 
{ 
    public SwingApp() 
    { 
     // No mouseDragged-event is received when using this : 
    this.addMouseListener(new mouseEventHandler()); 

    // This works correct (when uncommented, of course) : 
    // this.addMouseMotionListener(new mouseMovedEventHandler()); 


    setBounds(400,200, 550,300); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setResizable(false); 
    setVisible(true); 
    } 

    public static void main(String args[]) 
    { 
    new SwingApp(); 
    } 

    class mouseEventHandler extends MouseAdapter 
    {   
    @Override 
    public void mouseDragged(MouseEvent e) // Why is this method never called ? 
    { 
     System.out.println(String.format("MouseDragged via MouseAdapter/X,Y : %s,%s ", e.getX(), e.getY())); 
    } 
    } 

    class mouseMovedEventHandler extends MouseMotionAdapter 
    {   
    @Override 
    public void mouseDragged(MouseEvent e) 
    { 
     System.out.println(String.format("MouseDragged via MouseMotionAdapter/X,Y : %s,%s ", e.getX(), e.getY())); 
    } 
    } 

} 

उत्तर

20

आप

this.addMouseListener(new mouseEventHandler()); 

के माध्यम से इसे जोड़ने यदि आप प्राप्त नहीं होगी गति से संबंधित MouseEvents (यही कारण है कि आप के लिए श्रोता पंजीकृत नहीं है!)

आपको श्रोता को दो बार जोड़ना होगा, यानी addMouseMotionListener का उपयोग करके इसे जोड़ना होगा:

mouseEventHandler handler = new mouseEventHandler(); 
this.addMouseListener(handler); 
this.addMouseMotionListener(handler); 

दोनों प्रकार की घटनाओं को प्राप्त करने के लिए।

(ए पक्ष नोड, हमेशा अपनी कक्षाओं के लिए एक पूंजी पहले अक्षर का उपयोग, जैसे कि, MouseEventHandler का उपयोग :-) बजाय

3

तुम दोनों mouseListener और mouseMotionListener के रूप में अपने MouseAdapter जोड़ने होगा, और आप सुनहरा हो जाएगा। MouseAdapter दोनों MouseListener और MouseMotionListener को लागू करता है, लेकिन आपका घटक माउस को पास करने के बारे में नहीं जानता है जब तक कि आप addMouseMotionListener

पर कॉल न करें
संबंधित मुद्दे