2016-01-30 69 views
0

我發現一個奇怪的問題,同時試圖寫一個拖動&下降練習。 看來,沒有MouseAdapter.mouseDragged被調用時,我嘗試拖動一個JPanel(左鍵單擊並嘗試拖動)。 感興趣的代碼如下: 公共類DragMouseAdapter擴展MouseAdapter {No mouseDragged over JPanel

@Override 
public void mouseDragged(MouseEvent e){ 
    System.out.println("Mouse dragged on source: " + e.getSource()); 
} 
} 
... 

然後,somwthere在JFrame中:

DragMouseAdapter my = new DragMouseAdapter(); 

    jPanel1.addMouseListener(my); 
    jPanel2.addMouseListener(my); 

,我看沒有打印輸出。這裏有什麼問題?

+0

考慮提供一個[可運行示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這會減少混淆和更好的反應。你可能會發現[如何編寫鼠標監聽程序](http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html)的一些幫助 – MadProgrammer

回答

2

mouseDragged是MouseMotionListener的一部分,因此您需要使用addMouseMotionListener而不是(或除此之外)addMouseListener

編輯:包括我的答案,而不是在評論如下信息:

一個MouseListener的處理f.ex.鼠標點擊,而MouseMotionListener處理鼠標移動(拖動)。還有一個MouseWheelListener。爲了向組件註冊每種類型的Listener(在你的情況下是一個JPanel),必須調用相應的方法; addMouseListener,addMouseMotionListener或addMouseWheelListener。欲瞭解更多信息,請看How to Write a Mouse-Motion ListenerMouseAdapter API docs

+0

你可以告訴請求有什麼區別addMouseListener/addMouseMotionListener設置? –

+0

用信息更新了我的答案的文字。 – reowil

0

您需要一個MouseMotionAdapter而不是MouseAdapter。只需將您的代碼更改爲:

public class DragMouseAdapter extends MouseMotionAdapter{ 
    @Override 
    public void mouseDragged(MouseEvent e){ 
     System.out.println("Mouse dragged on source: " + e.getSource()); 
    } 
} 
+0

MouseAdapter具有(空)方法來處理所有*種類的鼠標事件,包括拖動等運動事件。編寫擴展類的程序員需要實現哪些方法。 :) – reowil

+0

我想主要是添加一個適配器作爲「addMouseMotionListener」,因爲添加爲「addMouseListener」只處理點擊。那麼,測試並不難 –