1

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

所以我想以某种方式锁定该组件上的 mouseDragged 事件,但如果我将光标移到组件外,我不会再收到 mouseDragged 事件。

我该如何解决?我的同事告诉我,存在一些像 captureMouse 这样的功能。

4

3 回答 3

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);
于 2010-11-08T13:35:04.090 回答
0

我不认为捕获鼠标是一个好主意。我也不认为你想要什么是必要的。

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

如果您的应用程序的行为不同,也许您的鼠标处理有不同的错误?

例如,在此页面的中间试用小程序:您会看到可以开始拖动矩形并将鼠标移到小程序区域之外,它会继续工作: http://www.dgp.toronto .edu/~mjmcguff/learn/java/04-mouseInput/

(我不知道上面代码的作者;它只是我在搜索java applet mousedragged时发现的第一个。)

于 2010-11-08T14:44:39.377 回答
0
JComponent.setAutoScrolls(...);
于 2010-11-08T15:31:31.093 回答