鼠标退出java时锁定事件

鼠标退出java时锁定事件,java,mouse,mouseevent,mouseout,Java,Mouse,Mouseevent,Mouseout,我写了一个应用程序,你可以左右拖动一些时间线。 当我拖动时,我知道这是一个鼠标标记的事件。由于我将鼠标光标移到组件外部,它停止拖动,但我不希望这样 所以我想以某种方式锁定该组件上的mouseDragged事件,但若我将光标移到该组件之外,就不会再得到mouseDragged事件 我怎样才能解决这个问题?我的同事告诉我存在一些函数,如captureMouse。您的“时间线”的哪一部分是接收mouseDragged()事件的实际组件?通常在收到此事件时,您会移动组件以匹配拖动操作-这样,组件应始终位

我写了一个应用程序,你可以左右拖动一些时间线。 当我拖动时,我知道这是一个鼠标标记的事件。由于我将鼠标光标移到组件外部,它停止拖动,但我不希望这样

所以我想以某种方式锁定该组件上的mouseDragged事件,但若我将光标移到该组件之外,就不会再得到mouseDragged事件


我怎样才能解决这个问题?我的同事告诉我存在一些函数,如captureMouse。

您的“时间线”的哪一部分是接收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);

我认为抓老鼠不是个好主意。我也不认为这是你想要的

根据我的经验,mouseDragged()事件即使在将鼠标移到组件区域之外也可以正常工作:它将继续报告组件内部最靠近组件外部鼠标位置的X和Y位置,但不会终止鼠标拖动,就好像释放了左键一样

如果您的应用程序的行为不同,那么您的鼠标操作可能有不同的错误

例如,在本页的一半位置尝试小程序:您将看到可以开始拖动矩形并将鼠标移到小程序区域之外,并且它将继续工作:


(我不知道上面代码的作者;这只是我通过搜索java applet mousedragged找到的第一个代码之一。)

我尝试了JTeagle所说的,但后来我意识到Irish Buffer是正确的,我甚至不需要使用AWTListener。
JComponent.setAutoScrolls(...);