2010-03-11 25 views
2

我將在我的Java Swing桌面應用程序中使用JTree。我讀了MVC Design pattern,根據它,我們應該使用ModelSwing Components來將JComponent的數據模型從它的表示部分中分離出來。Java Swing - 如果JTree與TreeModel一起使用 - MVC設計模式

所以我簡單的問題如下:

  • JTree(TreeModel newModel)

  • JTree(Object[] value)

  • JTree(TreeNode root)

  • JTree(Vector<?> value)

  • JTree(HashTable<?, ?> value)

在對用於創建JTree

Q1上述選項。使用JTree(TreeModel newModel)來應用MVC模式總是更好嗎?

回答

7

這取決於您的需求。我傾向於認爲Swing組件構造器以輸入非模型對象的形式實際上是快速原型設計的捷徑。實際上,在引擎蓋背後,Swing組件將從輸入對象創建一個模型,因爲它需要一個模型對象來正確發送所有事件。

因此,這裏是我的建議:

  • 對於快速原型,您可以考慮使用這些「模仿式」構造
  • 的對於「真實世界」的應用程序,唐甚至不用考慮它們,因爲越早或後者都會產生對特定事件發送的需要(改變一個節點渲染,使樹長大,...)
+0

這裏有一些很好的建議。 – Adamski 2010-03-11 10:12:44

2

正如Riduidel所說,JTree總是使用TreeModel在內部,所以其他構造函數實際上只是爲了方便。

還有setModel(JTree)方法,它將設置(並替換)模型。在一個非平凡的應用程序中,您可能需要在填充數據之前構建框架和它的組件。

我不認爲任何構造函數爲非MVC。在這方面更重要的是,你應該保證數據,UI和邏輯的代碼儘可能獨立和不依賴。這使您可以更好地測試代碼,並有助於提高靈活性和可重用性。

+0

我發現你的方法很有趣... 你經常創建沒有加載模型的小部件嗎? (純粹的好奇心問題) 從我的角度來看,我發現最好使用相關模型創建窗口小部件(即使我最終在加載並顯示窗口小部件後將數據放入模型中),而不是在組件視圖中交換模型,可能會引入一些fl。。 – Riduidel 2010-03-11 10:28:58

+0

是的,我開發了數據庫支持的應用程序,因此等待數據加載需要很長時間。我們構建框架,然後在數據加載時交換模型(或者只是添加項目)。我聲稱這是最好的解決方案,但它適用於我們。 – tom 2010-03-11 10:45:22

+0

哎呀,我不是說這是最好的解決方案 – tom 2010-03-12 00:44:36