我写了一个应用程序,你可以左右拖动一些时间轴。 当我拖动时,我知道这是一个mouseDragged事件。由于我将鼠标光标移动到组件外部,它会停止拖动,但我不希望这样。
所以我想以某种方式锁定该组件上的mouseDragged事件,但如果我将光标移到组件外部,我就不会再获得mouseDragged事件。
我该如何解决?我的同事告诉我,有一些像captureMouse这样的功能。
答案 0 :(得分: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);
答案 1 :(得分:0)
我认为捕获鼠标不是一个好主意。我也不认为这对你想要的东西是必要的。
根据我的经验,即使将鼠标移动到组件区域之外,mouseDragged()事件也能正常工作:它将继续报告组件内最接近组件外部鼠标位置的X和Y位置,但它不会像你释放左键一样终止鼠标拖动。
如果你的应用程序的行为不同,也许你的鼠标处理有一个不同的错误?
例如,在此页面的一半处尝试applet:您将看到可以开始拖动矩形并将鼠标移动到applet区域之外,它将继续工作: http://www.dgp.toronto.edu/~mjmcguff/learn/java/04-mouseInput/
(我不知道上面代码的作者;它只是我在搜索 java applet mousedragged 时找到的第一个。)
答案 2 :(得分:0)
JComponent.setAutoScrolls(...);