摆动焦点问题

时间:2010-04-04 08:43:16

标签: swing focus action toolbar

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

有没有人想知道解决这个问题的方法? 有人知道如何确定现在点击鼠标按钮了吗?

2 个答案:

答案 0 :(得分:0)

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

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

重置窗口上mouseReleased事件中的工具栏标志,以便下次单击可以正常工作。

这假设窗口上的mouseReleased事件发生在工具栏上的actionPerformed之后(不确定)。最坏的情况是,你可以使用一个定时器,它会在鼠标事件发生后50ms重置标志。

答案 1 :(得分:0)

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