簡體   English   中英

帶有JTree的Java Swing應用程序-MVC設計:在結構上將TreeModel對象放置在哪里?

[英]Java Swing Application with a JTree - MVC Design: Where to position a TreeModel object architecturally?

請原諒這個問題的冗長性,因為在撰寫本文時,我正在嘗試思考我的設計問題!

我繼承了一個Swing應用程序,該應用程序需要重新架構到RMI應用程序中。 客戶要求Swing GUI在本地運行並通過RMI與遠程Server進程通信,該進程包含Controller類,該類在EventListener刺激時將調用定向到業務邏輯部分和后端數據庫持久性,從而彌合了Swing Client之間的差距和控制器。

我要實現MVC設計,以允許開發新的視圖以用於服務器。

當前,Swing Client GUI包含一個JTree,它使用DefaultTreeModel填充。 該模型是使用DefaultMutableTreeNode對象構造的,這些對象通過位於這些對象與我的數據源之間的BusinessObject映射器填充了Business Object狀態。

我對理解Client和TreeModel的鏈接方式沒有任何問題:我已經建立了TreeModelListener來尋找對TreeModel的更改。 如果TreeModel對象更改,則通過調用JTree的treeHasChanged()方法來重繪JTree。

但是,我很想知道是什么過程會刺激TreeModel,以便用數據庫中的最新數據重新填充其內容,這又將調用TreeModelListener來更新GUI的Jtree。 誰應該“擁有” TreeModel? 模型中的Class是否應該構成Controller狀態的一部分? GUI的EventListener在控制器中的操作是否應該硬調用運行例程以刷新TreeModel?

或者,TreeModel是GUI窗口小部件的擴展,在這種情況下,它是View組件? 如果是這樣,調用此對象狀態的刷新的正確方式是什么?

我可能應該指出,最近幾天我一直在考慮觀察者和偵聽器,因此我可能會因試圖調用行為而被解雇,從而感到內gui。

您的,非常困惑!

我不確定您是否描述AbstractTreeModel或DefaultTreeModel ,我認為這篇文章了解TreeModel仍然是最好的選擇,並鏈接到JTree教程。

為了獲得真正的幫助,您必須在SSCCE表格中編輯問題並張貼headache圖像, 是創建SSCCE

除了@mKorbel的信息性鏈接和@Shakedown的注釋之外,還可以考慮使用SwingWorker周期性地破壞中間層並更新TreeModel ,也許是響應Timer 有一個相關的例子在這里 ; 請注意,GUI在查詢運行時保持響應。 當然,由您的應用程序決定運行更新的頻率以及更新GUI的頻率。

我已經解決了這個問題。

我認為將Swing API包含在我的應用程序模型中是一個壞主意,因為我的應用程序可以采用許多不同類型的UI(Headless,Swing,Web)。

因此,我認為正確的方法是讓TreeModel對象駐留在View中,並由View Helper填充,該View Helper可向任何感興趣的UI提供對Model層的通用表示形式的訪問。

暫無
暫無

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

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