簡體   English   中英

Java Swing GUI代碼結構

[英]Java Swing GUI code structure

我有一個擴展JFrame的類,並形成我的程序的GUI。 我想將GUI用於兩個主要目的:

  1. 我希望用戶能夠為程序輸入值。
  2. 我希望GUI顯示由我的程序創建的值。

考慮到我的類有很多GUI元素,源文件已經相當大,並且將所有程序代碼與GUI代碼捆綁在一起似乎不是一種好的做法。 我想知道構建代碼​​的最佳方法是什么? 我相信有一個問題,其中需求1創建了從GUI到程序代碼的依賴關系,而第二個要求恰恰相反。

所以,我想要一個用於GUI的類,其中包含我所有與GUI相關的任務。 然后我想要另一個類用於我的程序邏輯。 然后我應該能夠從GUI調用程序邏輯類中的方法,反之亦然。

聽起來像是在尋找教科書MVC(模型 - 視圖 - 控制器)設計模式。 我推薦你谷歌“MVC設計模式”的摘要和用例。 話雖這么說,您可能希望將您的程序邏輯放入“Singleton”類(再次,谷歌“Singleton設計模式”)。 應該可以從代碼中的任何其他類訪問正確實現的Singleton。

還要考慮第三個中間類,它僅用於數據存儲,您將值放入存儲中,然后從中獲取值以進行工作。 現在,這為您的代碼創建了3個明確的段,數據(模型),GUI(視圖)和邏輯(控制器)。 瞧,你剛剛實現了MVC(模型 - 視圖 - 控制器)設計模式......

業務邏輯不應該依賴於GUI邏輯。

讓您的GUI從用戶那里獲取輸入。 使用這些輸入作為方法參數調用業務邏輯方法,並使用方法返回的值在GUI中顯示結果。 因此,GUI取決於業務邏輯,但反之則不然。

如果業務邏輯必須回調GUI,它應該通過定義良好的GUI無關的回調接口或監聽器來實現。 例如,您可以在某個業務邏輯對象上注冊ProgressListener,此對象將回調進度監聽器。 GUI將具有ProgressListener的實現,其實際上將更新一些進度條或文本區域。 但業務邏輯僅取決於接口,而不取決於具體實現。

我不確定是否有一種“最好”的方法來構建GUI代碼。 但是,作為一般規則,您應該遵循MVC。 您的程序(型號) 永遠不應該直接依賴於您的View代碼。 允許做的是通知控制器模型(或其部分)改變,並且當前顯示模型的所述部分的任何視圖都應該被更新。

Swing已經為它的某些類型的組件提供了這個抽象層,大多數類(有些令人困惑)后綴為Model 您可以看到的一個簡單示例是BoundedRangeModel 對於程序管理的每個“單位”數據,應該只有一個這樣的模型實例,顯示此數據的不同視圖應該共享此實例。 您的業​​務代碼管理此對象,每當此數據更改時,將通過觸發某些事件偵聽器來通知GUI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM