1

我在一个组件上有一个 MouseListener 并且想要监听 mouseReleased 事件,而不需要 mousePressed 事件。如何检测用户是否按下了另一个按钮、桌面或其他窗口(或任何东西,真的)并在我的组件上释放?

例如,在下面的例子中,我怎样才能让它打印“cool”,而不是“Not cool”?

titleBar.addMouseListener(new MouseListener()
{
    @Override public void mouseReleased(MouseEvent e)
    {
        System.out.println("cool");//Detect this
    }
    @Override public void mousePressed(MouseEvent e)
    {
        System.out.print("Not ");//Without this having to happen first
    }
    @Override public void mouseExited(MouseEvent e)
    {
    }
    @Override public void mouseEntered(MouseEvent e)
    {
    }
    @Override public void mouseClicked(MouseEvent e)
    {
    }
});
4

2 回答 2

4

当 mousePressed 源自另一个应用程序时,您无法侦听 mouseReleased。这是因为释放鼠标时 Java 应用程序将没有焦点。Java con 仅在具有焦点时处理事件。

在 Java 应用程序中,您可以侦听所有 mouseReleased 事件。但是,在这种情况下,将为生成 mousePressed 事件的组件生成 mouseReleased 事件。因此,您还需要监听 mouseEntered 和 mouseExited 事件。因此,如果 mouseReleased 事件之前有 mouseEntered 事件,则您需要使用 mouseEntered 事件的源来获取 mouseReleased 事件的对象。

为此,您可以使用 AWTEventListener。有关详细信息,请参阅全局事件侦听器

于 2013-06-11T01:26:12.617 回答
0

当鼠标光标在组件的范围内时,Java 组件可以检测到 MouseEvent;尽管应用程序窗口在(即通过拖放调整窗口大小)期间可能仍然处于焦点状态,但即使它是 MouseListener,鼠标事件也不再通知给应用程序窗口组件,因为鼠标光标超出了组件的范围。

于 2021-11-13T19:47:33.173 回答