2012-05-28 50 views
3

我剛剛完成我們的考試項目,回頭看看我編碼的內容時,我覺得我做得很好。雖然,東西可以明顯總是會更好。但也許這只是我。從構造函數構建GUI。 [設計決策]

我負責GUI的編碼,並將其與應用程序邏輯耦合起來。在製作GUI時,我決定爲每個窗口創建一個類文件(例如LoginWnd.java),並在構造函數中實際構建GUI。我會初始化所有的東西並在這個構造器中設置所有的數據。

然後爲了瀏覽應用程序,我會設置jbutton上的actionlisteners。例如,在SearchWnd中,點擊「Search」按鈕將創建一個帶有一些指定參數的ResultWnd新對象。

現在我有點想知道:這種設計決定在任何方面都不好?有沒有我應該知道的設計範例?

謝謝。

回答

3

你的方法總體上聽起來不錯 - 只要它有效,你已經達到了主要目標!所以我在這裏的評論更多的是關於微調/更廣泛的設計方面。

在構造函數中執行GUI構造沒有什麼根本性的錯誤,它提供了,GUI在程序執行期間不會隨後發生變化。這裏的基本原理是施工人員應該留作「一次性」施工活動。所以對於有預定佈局的對話框和類似對象來說可能是好的。

如果你有一個更動態的GUI,在程序執行過程中經常添加和刪除組件,那麼我強烈建議將它移到構造函數外部的一組方法中,以便可以獨立於對象構造來調用它們。如果需要進行初始設置,構造函數本身仍然可以調用這些方法,但隨後您可以稍後調用這些方法來添加新組件,刷新佈局等。

好消息是,這個東西不是如果你弄錯了,很難重構 - 如果需要的話,將設置代碼從構造函數中拖出到單獨的方法通常是微不足道的。

要注意的另一件事是經常重複的口頭禪「寧願組合繼承」。也就是說,如果您可以通過組裝現有組件而不是繼承和覆蓋您的設計,從而使您的GUI工作起來,那麼從長遠來看,可能會更好/更容易維護。例如,我不認爲自己曾經使用JFrame子類 - 只是在它內部添加包含所有應用程序特定組件的JPanel幾乎總是很乾淨。

最後,請謹慎將您的GUI組件與您的應用程序邏輯緊密結合。 Swing實際上做的很好,可以讓你從演示代碼中分離出你的數據模型(例如使用ListModel and friends)。值得研究和理解這種方法。問題是,您應該通過通常以一種與應用程序無關的方式構建GUI組件,但通過將它們連接到正確的數據模型和事件處理程序等方式爲它們提供特定於應用程序的行爲。

+0

謝謝隊友。我不太明白你剛纔所說的那麼多,因此研究很多。但總的來說,這似乎是合法的。 :) – yackyackyack

0

我也在構造函數中初始化我的GUI,所以它不能壞:)但是當它太長時間我將部分代碼提取到單獨的GUI組件中。