我將重構Swing應用程序從使用ActionListeners到Action類,因爲我意識到我的很多菜單項也將用於工具欄。如何從其他操作調用操作? (如果這是明智的)
現在我有一個名爲ImportExport
的類,它處理底層模型的狀態,然後顯示適當的用戶對話框。 ImportExport
具有功能save()
,saveAs()
和open()
。當用戶點擊「打開」菜單項時,動作偵聽器首先調用open()
,open()
檢查模型是否有變化,如果是這種情況,則會顯示一個對話框詢問用戶是否想先保存。現在如果用戶點擊「是」open()
調用save()
,它再次執行一些檢查並顯示用戶對話框。 save()
非常持久:離開此操作的唯一方法是通過成功保存或用戶決定要取消。我強烈依靠save()
提供的反饋,如果用戶想取消,我也取消了調用open()
函數。
我想給ImportExport
類分成三類(OpenAction
,SaveAction
& SaveAsAction
),他們每個人的繼承AbstractAction
並最終擺脫ImportExport
類的。這就是我的問題出現的地方:如果用戶想在打開另一個模型之前保存模型,我該如何告知SaveAction
執行?如果用戶決定取消,我該如何獲得反饋?
這是否是正確的方法?我不喜歡在保存和打開操作中有重複的代碼,並且我已經將盡可能多的功能放到了我的底層模型中,但用戶對話框在這裏顯然不合適,所以這是不行的。是Action
設計在所有舉行這種功能或sould我只是保持我的ImportExport
類,並簡單地委託所有的動作調用ImportExport
適當的功能。你如何使用Actions
?