Swing 摆动焦点问题

Swing 摆动焦点问题,swing,focus,action,toolbar,Swing,Focus,Action,Toolbar,在我的应用程序中,我有一个带有工具栏的框架(工具栏包含一些操作)。 我希望工具栏仅在窗口聚焦时可见。 因此,我在窗口上注册了一个windowFocusListener。 问题是- 当窗口没有聚焦,我点击工具栏动作应该在的位置时,该动作被执行。 之所以会出现这种情况,是因为在释放鼠标按钮之前调用WindowFocusGain,而当释放鼠标按钮时调用actionPerformed 有人对解决这个问题有什么想法吗? 有人知道如何确定现在是否单击了鼠标按钮吗?您可以在窗口中添加鼠标侦听器,并检查工具栏是

在我的应用程序中,我有一个带有工具栏的框架(工具栏包含一些操作)。 我希望工具栏仅在窗口聚焦时可见。 因此,我在窗口上注册了一个windowFocusListener。 问题是- 当窗口没有聚焦,我点击工具栏动作应该在的位置时,该动作被执行。 之所以会出现这种情况,是因为在释放鼠标按钮之前调用WindowFocusGain,而当释放鼠标按钮时调用actionPerformed

有人对解决这个问题有什么想法吗?
有人知道如何确定现在是否单击了鼠标按钮吗?

您可以在窗口中添加鼠标侦听器,并检查工具栏是否在“鼠标按下”事件中可见。如果在按下鼠标时工具栏不可见,请在工具栏上设置一个标志(类似于“ignoreNextAction”)

在工具栏中,检查actionPerformed事件处理程序中的该标志

在窗口上的MouseRelease事件中重置工具栏标志,以便下一次单击将正常工作

这是假设窗口上的MouseRelease事件发生在工具栏上执行的操作之后(对此不确定)。最糟糕的情况是,您可以使用一个计时器,在鼠标事件发生50毫秒后重置标志。

现在,您只能在窗口失去焦点时隐藏工具栏,还可以使用
setEnabled(false)
禁用所有按钮,然后重新启用焦点增益。或者,将setEnabled(..)与按钮的可见性(而不是窗口焦点)同步