我在一个组件上有一个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)
{
}
});
发布于 2013-06-11 01:26:13
当mouseReleased源自另一个应用程序时,您不能侦听mousePressed。这是因为当释放鼠标时,Java应用程序将不具有焦点。Java con只有在拥有焦点时才会处理事件。
在Java应用程序中,您可以侦听所有mouseReleased事件。但是,在这种情况下,将为生成mousePressed事件的组件生成mouseReleased事件。因此,您还需要侦听mouseEntered和mouseExited事件。因此,如果mouseReleased事件之前是mouseEntered事件,则需要使用mouseEntered事件的源来获取mouseReleased事件的对象。
为此,您可以使用AWTEventListener。有关详细信息,请参阅Global Event Listeners。
发布于 2021-11-13 11:47:33
当鼠标光标在组件的边界内时,Java组件可以检测到MouseEvents;尽管应用程序窗口可能在(例如,窗口大小通过拖放)不再通知应用程序窗口组件,即使它是一个MouseListener,因为鼠标光标在组件的边界之外。
https://stackoverflow.com/questions/17034884
复制相似问题