我在组件上有一个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)
{
}
});
最佳答案
当mousePressed起源于另一个应用程序时,您将无法收听mouseReleased。这是因为释放鼠标时Java应用程序将没有焦点。 Java con仅在具有焦点时处理事件。
在Java应用程序中,您可以侦听所有mouseReleased事件。但是,在这种情况下,将为生成mousePressed事件的组件生成mouseReleased事件。因此,您还需要侦听mouseEntered和mouseExited事件。因此,如果在mouseReleased事件之前添加mouseEntered事件,则需要使用mouseEntered事件的源来获取mouseReleased事件的对象。
为此,您可以使用AWTEventListener。有关更多信息,请参见Global Event Listeners。