在Swing項目時,我使用了一個JFrame
,把它分成三個部分:菜單窗格,一個情景窗格和狀態窗格。添加監聽到的JFrame和所有子
狀態窗格在執行操作時向用戶顯示其操作是否成功,以及用戶可能想知道的其他信息。例如,如果用戶單擊上下文菜單中的刪除按鈕,狀態面板將指示操作是否成功完成。
狀態面板的問題在於它需要稍後更新其狀態。例如,如果用戶單擊另一個按鈕或瀏覽上下文窗格中的其他頁面,則狀態窗格不應該仍顯示上次刪除操作的結果。
這有兩種解決方法,我能想到的:
- 明確幾秒鐘後的狀態。
- 向所有組件(
JPanels
,JTextFields
,...)添加鼠標或鍵盤動作偵聽器,以便在來自鼠標或鍵盤的活動時它們調用狀態面板來清除狀態。
儘管實施第一個選項相對簡單,但還不夠。我想我需要兩者的結合。然而,問題在於,如果我想將這些動作偵聽器添加到所有組件,它將是一個非常骯髒的方法。也許我可以將它添加到主框架。我做了(代碼在下面給出),但是如果只在鼠標在框架自己的面板上移動時才起作用(例如,不在上下文窗格上)
您有什麼建議嗎?
JFrame.this.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent me) {
}
@Override
public void mouseMoved(MouseEvent me) {
Config.statusPanel.clearStatus();
}
});
或者,您的模型可以將更改推送給某個狀態管理器,而不是偵聽模型上的更改,然後更新UI中的狀態。但基本原則仍然相同 – Robin
@Robin:只要模型不必擔心知道任何視圖的任何內容,就可以拉或推數據。 –