2010-11-08 51 views
1

我寫了一個應用程序,您可以在左右拖動一些時間軸。 當我拖動我知道這是一個mouseDragged事件。由於我將鼠標光標移到組件外面,它會停止拖動,但我不想那樣做。鼠標退出時鎖定事件java

所以我想以某種方式鎖定該組件上的mouseDragged事件,但如果我將光標移到組件外,我不再獲取mouseDragged事件。

我該如何解決這個問題?我的同事告訴我存在一些像captureMouse這樣的函數。

回答

0

我不認爲捕獲鼠標是個好主意。我也不認爲這是必要的,你想要的。

根據我的經驗,即使將鼠標移動到組件區域外,mouseDragged()事件也能正常工作:它將繼續報告組件內X和Y位置與組件外最接近鼠標位置的位置,但它不會終止鼠標拖動,就像你釋放了左鍵。

如果您的應用程序的行爲不同,也許您的鼠標處理有不同的錯誤?

例如,嘗試一下小程序中途下此頁:你會看到,你可以開始拖動矩形和移動你的鼠標在applet區域之外,並且將繼續努力: http://www.dgp.toronto.edu/~mjmcguff/learn/java/04-mouseInput/

(我不知道上面的代碼的作者,它只是我第一次發現與搜索Java小程序中的一個的mouseDragged

+0

我試了一下JTeagle說,但後來我意識到,愛爾蘭緩衝區是正確的,我甚至不需要使用AWTListener。 – Ivansek 2010-11-09 11:16:18

0

'時間線'的哪個部分是接收mouseDragged()事件的實際組件?通常,在接收到此事件時,您將移動組件以匹配拖動動作 - 這樣,組件應始終位於鼠標下並始終接收mouseDragged()事件,直到您放開它。在處理事件時是否移動此組件?用作滑塊的小型按鈕式矩形將成爲一個優秀的組件。

(如果你試圖把你的整個時間表作爲組件,因此不會動它來搭配,你想要什麼,如果用戶拖動鼠標而在外面發生什麼呢?)

雖然Windows(和可能還有其他的)支持捕捉鼠標,Java似乎不會。您可以提供一個自定義事件隊列,如下所示:

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() 
    { 
     public void eventDispatched(AWTEvent e) 
     { 
      // Look for mouse messages and handle them... 
     } 

    } 
, AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK); 
0
JComponent.setAutoScrolls(...);