【问题标题】:Lock event on mouse exit java鼠标退出java上的锁定事件
【发布时间】:2011-05-06 15:58:52
【问题描述】:

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

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

我该如何解决?我的同事告诉我,有一些类似 captureMouse 的功能。

【问题讨论】:

    标签: java mouse mouseevent mouseout


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我尝试了 JTeagle 所说的,但后来我意识到爱尔兰缓冲区是对的,我什至不需要使用 AWTListener。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      JComponent.setAutoScrolls(...);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 2012-01-21
        • 2011-01-27
        相关资源
        最近更新 更多