我有一個簡單的程序,利用Java Swing Timer顯示圖像400毫秒,在這段時間我只想停止所有的ActionListeners或停止採取ActionEvents。我有40多個按鈕,想要一個簡單的方法來做到這一點。在Java中停止接收所有ActionEvents/Stop Listening一段時間?
有沒有辦法在Java中做到這一點?
我有一個簡單的程序,利用Java Swing Timer顯示圖像400毫秒,在這段時間我只想停止所有的ActionListeners或停止採取ActionEvents。我有40多個按鈕,想要一個簡單的方法來做到這一點。在Java中停止接收所有ActionEvents/Stop Listening一段時間?
有沒有辦法在Java中做到這一點?
你能確定你處於這個「圖像顯示」狀態嗎?圖像上升,您將狀態設置爲「圖像顯示」或其他。瀏覽你的小部件,並決定哪些應該在圖像啓動時死機。把它們變成這個狀態值的觀察者。當狀態改變時,它們或者根據需要啓用或禁用。圖像代碼不會直接對任何小部件進行任何操作。它只是聲明國家現在是「圖像顯示」。這是由觀察員決定如何處理該信息。
或使用GlassPane。這也起作用。當然,GlassPane關閉的一切都是。如果您需要更具選擇性,您需要更加精細的方法。
您可以使用臨時GlassPane
實例通過向其註冊空聽衆來消費所有事件。
使用未修飾的模態JDialog來顯示圖像。在使對話框可見之前,您需要啓動計時器。當計時器在400毫秒內觸發時,關閉對話框。
我有類似的問題,通常發現它的設計問題,讓我在那種情況下。既然如此,我仍然必須找到它。爲了解決這個問題,我保留了一個我想要禁用的元素的列表(停止監聽),並在計時器的開始和結束時遍歷它們。對於按鈕應該是這麼簡單:
for(Component c : listOfToggledComponents){
c.setEnabled(shouldItBeEnabled);
}
對於按鈕,這將變灰的按鈕。類似的事情發生在其他鞦韆組件上。
我不推薦這個解決方案。 – mre
也許一個解釋,爲什麼可能有利於OP和我自己。不過,我也喜歡Steve J的建議,儘管它是一種類似的迭代方法。 –