java - 检测mouseReleased没有mousePressed

时间:2013-06-11 00:32:03

标签: java swing mouselistener

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

例如,在下面的示例中,如何让它打印“酷”而不是“不酷”?

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)
    {
    }
});

1 个答案:

答案 0 :(得分:4)

当mousePressed在另一个应用程序上发起时,您无法侦听鼠标。这是因为Java应用程序在释放鼠标时不会有焦点。 Java con只在有焦点时处理事件。

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

为此,您可以使用AWTEventListener。有关详细信息,请参阅Global Event Listeners