在我的應用程序中,我有一個框架,帶有工具欄(工具欄包含一些動作)。 我希望工具欄僅在窗口焦點時纔可見。 因此,我在窗口上註冊了一個windowFocusListener。 問題是- 當窗口沒有被聚焦時,我點擊工具欄動作應該在的地方 - 執行動作。 發生這種情況是因爲WindowFocusGained在釋放鼠標按鈕之前調用,當釋放鼠標按鈕時它調用actionPerformed。擺動焦點問題
有沒有人有任何想法解決這個問題? 有誰知道如何確定現在鼠標按鈕被點擊了嗎?
在我的應用程序中,我有一個框架,帶有工具欄(工具欄包含一些動作)。 我希望工具欄僅在窗口焦點時纔可見。 因此,我在窗口上註冊了一個windowFocusListener。 問題是- 當窗口沒有被聚焦時,我點擊工具欄動作應該在的地方 - 執行動作。 發生這種情況是因爲WindowFocusGained在釋放鼠標按鈕之前調用,當釋放鼠標按鈕時它調用actionPerformed。擺動焦點問題
有沒有人有任何想法解決這個問題? 有誰知道如何確定現在鼠標按鈕被點擊了嗎?
您可以將MouseListener添加到窗口,並檢查該工具欄是否在mousePressed事件中可見。如果在按下鼠標時工具欄不可見,請在工具欄上設置一個標誌(如「ignoreNextAction」)。
在工具欄中,檢查actionPerformed事件處理程序中的該標誌。
重置窗口中mouseReleased事件中的工具欄標誌,以便下次單擊會正常工作。
這是假設窗口上的mouseReleased事件發生在工具欄上的actionPerformed後(不確定這一點)。最糟糕的情況是,您可以使用計時器,在鼠標事件後50ms重置標記。
你可以現在只隱藏當窗口失去焦點,而且還與setEnabled(false)
禁用所有按鈕工具欄,然後聚焦增益重新啓用。或者,將setEnabled(..)與按鈕的可見性(而不是窗口焦點)同步。