2010-04-04 75 views
0

在我的應用程序中,我有一個框架,帶有工具欄(工具欄包含一些動作)。 我希望工具欄僅在窗口焦點時纔可見。 因此,我在窗口上註冊了一個windowFocusListener。 問題是- 當窗口沒有被聚焦時,我點擊工具欄動作應該在的地方 - 執行動作。 發生這種情況是因爲WindowFocusGained在釋放鼠標按鈕之前調用,當釋放鼠標按鈕時它調用actionPerformed。擺動焦點問題

有沒有人有任何想法解決這個問題? 有誰知道如何確定現在鼠標按鈕被點擊了嗎?

回答

0

您可以將MouseListener添加到窗口,並檢查該工具欄是否在mousePressed事件中可見。如果在按下鼠標時工具欄不可見,請在工具欄上設置一個標誌(如「ignoreNextAction」)。

在工具欄中,檢查actionPerformed事件處理程序中的該標誌。

重置窗口中mouseReleased事件中的工具欄標誌,以便下次單擊會正常工作。

這是假設窗口上的mouseReleased事件發生在工具欄上的actionPerformed後(不確定這一點)。最糟糕的情況是,您可以使用計時器,在鼠標事件後50ms重置標記。

0

你可以現在只隱藏當窗口失去焦點,而且還與setEnabled(false)禁用所有按鈕工具欄,然後聚焦增益重新啓用。或者,將setEnabled(..)與按鈕的可見性(而不是窗口焦點)同步。