簡體   English   中英

如何用Swing在Java中正確實現MVC?

[英]How to correctly implement MVC in Java with Swing?

如果您想了解更多詳情,請告訴我們,或參考此問題的最后幾行。 我已經閱讀了很多內容,我覺得我正在把一些簡單的東西變成復雜的東西,我仍然會被困在那里,所以也許你可以在那些非常具體的方面幫助我。

我使用的是Netbeans IDE 7和JDK 7,沒有框架。 第一個窗口是JFrame,所有其他窗口都是JDialogs,模態=真。

問題:

  1. 如何使用swing正確實現MVC模式? 從下面的想法哪一個更好:(A)或(B)? 或者可能是另一個......為什么它更好?

    (A)主要:

     MyModel model MyView view(model) 

    我的看法:

     MyController(this, model) 

    (B)
    主要:

     MyModel model MyView View MyController controller(view, model) 
  2. 當我在MainFrame中單擊jbutton1時,我需要它來打開SettingsFrame進行編輯設置。 我應該在哪里實例化SettingsFrame的View,Model和Controller? 在MainFrame控制器?

  3. 在MVC組織和實現方面,我應該如何處理(顯然)缺少一個或兩個MVC“支路”(模型或視圖或控制器)的更多特定功能? 我應該為他們創建空課嗎?

     a. The implementation of a TrayIcon b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files) c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file) d. My own implementation of TableModel e. json 
  4. 如何在整個應用程序中正確保存和使用具有設置的對象? 我將在不同的地方(視圖,模型,控制器)需要它的信息,但在運行時可能會被用戶更改。 使這個模型成為單身人士是一個好主意嗎?

  5. 我應該怎么做:

     a. View needs some data from the Model? What I'm doing: using the reference of Model which I keep in the View b. View needs some data from the Controller? What I'm doing: using the reference of Controller which I keep in the View c. Model needs some data from the Controller? Still didn't happen but I have no idea how to do correctly d. Model needs some data from the View? What I'm doing: pulling all my hair from my head... e. Controller needs some data from the View? What I'm doing: using the reference of the View which I keep in the Controller f. Controller needs some data from the Model? What I'm doing: using the reference of the Model which I keep in the Controller g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController? What I'm doing: thinking of jumping from the highest building... 
  6. 關於如何正確實現MVC的任何提示? 我應該在模型或控制器中處理海量數據嗎?

  7. 我也在使用DAO,我正在做的是:我的模型有一個

    ArrayList MyModel load()

    創建DAO實例並返回由DAO返回的模型的ArrayList的方法,然后有時我在模型中處理這個模型的ArrayList,有時我允許Controller處理它。 這是一個好習慣還是有更好的方法? 按進程我的意思是:遍歷ArrayList並從模型中獲取數據。

  8. 我有一個PasswordCheck jDialog來限制對某些視圖的訪問。 如何在MVC方面重用它,以便我可以使用相同的PasswordCheck對話框來允許/限制對不同視圖的訪問而不會在代碼中造成混亂?

  9. 還有其他提示,提示,想法,建議嗎?

上下文:我需要在短時間內開發Java Swing MVC軟件,雖然默認情況下我不是Java開發人員而不是那么習慣於實現MVC模式,特別是在Java中(我明白了,但有時它缺乏我知道實現類之間的關系)。 這些應用程序基本上是一個本地/在線文件的監視器,主框架中有一個JTable來顯示這些數據。 我正在使用新的WatchService API來跟蹤本地文件並使用DAO將它們的信息保存在h2數據庫中,並在主框架jtable中重新加載這些數據。 我還必須通知用戶有關新文件(我正在使用TrayIcon)。 對於在線文件監控/上傳/下載我正在使用HttpsUrlConnection和json。 它還可能允許設置自定義。

在此先感謝您的時間和幫助。

看看Sun(甲骨文)的建議

作為一種簡化,您可以讓每個組件(模型,視圖,控制器)注冊一個頂級應用程序組件,以提供單個參考點,而不是每個組件(您的A或B)之間的單獨引用。 我引用的文章提供了推拉設計的想法; 我推薦push作為一種更流行的現代方法。 披露:我有使用Java和MVC的經驗,但在Swing本身沒有MVC。

我應該在哪里實例化SettingsFrame的View,Model和Controller?

當然,是的,或者在頂級應用程序組件中。

我應該如何處理(顯然)缺少一個或兩個MVC“腿”(模型或視圖或控制器)的更多特定功能?

我會將僅GUI的片段實現為您自己的GUI庫。 純粹的算法/服務作為服務庫。

我應該在模型或控制器中處理海量數據嗎?

數據處理算法很適合控制器甚至服務庫; 除了可能的數據類型轉換或驗證之外,您的模型不應該進行太多處理。

如何在整個應用程序中正確保存和使用具有設置的對象?

請參閱我的注冊說明; 單身可能是合適的。

暫無
暫無

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

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