自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JTable和TableModel簡化Swing

開發(fā) 后端
本文介紹JTable和TableModel簡化Swing開發(fā),分析JTable和TableModel目前的設計方法,說明這種設計的不足,展示為什么它沒有實現(xiàn)模型-視圖-控制器(MVC)模式的真正目標。

Java Desktop 的再介紹”強調(diào)了今年的 JavaOne 大會。對于那些抱怨 Swing 太慢、太難使用、界面太難看的開發(fā)人員來說,Swing 和 GUI 開發(fā)所做的更新努力,并沒有帶來什么受人歡迎的好消息。如果您最近沒有用過 Swing,那么您會很高興聽到其中的許多問題已經(jīng)得到解決。Swing 被重新設計,它能執(zhí)行得更好,并能更好地利用 Java 2D API。Swing 的開發(fā)者在 1.4 版甚至最新發(fā)布的 5.0 版中提高了外觀支持。Swing 從沒像現(xiàn)在這么好過。

如果以前曾經(jīng)用過 JTable,那么您可能也同時被迫使用了 TableModel。您可能還注意到,每個 TableModel 中的所有代碼,與其他 TableModel 中的代碼幾乎是一樣的,在編譯的 Java 類中,有差異的代碼實際上是不存在的。

本文將分析JTable和TableModel目前的設計方法,說明這種設計的不足,展示為什么它沒有實現(xiàn)模型-視圖-控制器(MVC)模式的真正目標。您將看到框架和構(gòu)成 TMF 框架的代碼 —— 我以前編寫的代碼與最常用的開放源代碼項目的組合。使用該框架,開發(fā)人員可以把 TableModel 的大小從數(shù)百行代碼減少到只有區(qū)區(qū)一行,并把重要的表信息放在外部 XML 文件中。在讀完本文之后,只使用如下所示的一行代碼,您就可以管理您的 JTable 數(shù)據(jù):

  1. TableUtilities.setViewToModel("tableconfig.xml", "My Table",  
  2. myJTable, CollectionUtilities.observableList(myData)); 

JTable和TableModel存在的 MVC 問題

MVC 已經(jīng)成為非常流行的 UI 設計模式,因為它把業(yè)務邏輯清晰地從數(shù)據(jù)的視圖中分離了出來。Struts 是 MVC 在 Web 上應用的一個非常好的例子。最初,Swing 最大的一個賣點是它采用了 MVC,將視圖從模型中分離了出來,代碼背后的想法是:代碼的模塊化程度足夠高,所以,不用修改模型中的任何代碼,就可以分離出視圖。我想,任何用過JTable和TableModel的人都會發(fā)笑,告訴您這是絕對不可能的。使用 MVC 設計模式的理想情況是,在開發(fā)人員用 JList 或 JComboBox 替換 JTable 時,可以不用修改表示數(shù)據(jù)的模式中的代碼。但是,在 Swing 中做不到這點。

Swing 使得把 JTable、 JList 和 JComboBox 熱交換到應用程序中成為不可能,即使所有這三個組件都是用來為相同的數(shù)據(jù)模型提供視圖。對于 Swing 中的 MVC 設計,這是一個嚴重的不足。如果您想為 JTable 交換 JList,就必須重寫視圖背后的全部代碼,才能實現(xiàn)該交換。

JTable和TableModel的另一個 MVC 缺陷是:模型變化的時候,視圖不會更新自身。開發(fā)人員必須保持對模型的引用,并調(diào)用一個函數(shù),這樣模型才會告訴視圖對自身進行更新;但是,理想的情況應當是:不需要任何額外的代碼,就能實現(xiàn)自動更新。

最后,JTable和TableModel 組件設計的問題是,它們彼此之間纏雜得過于密切。如果您修改了 JTable 中的代碼,那么您需要確保您沒有破壞負責處理的 TableModel,反之亦然。對于一個被認為是在模塊化基礎上建立的設計模式來說,目前的實現(xiàn)顯然是一種存在過多依賴關系的設計。

TMF 框架更好地遵循了 MVC 的目標,它把 JTable 中視圖和模型的工作更加清晰地分離開來。雖然它還沒有達到讓組件能夠熱切換的更高目標,但是它已經(jīng)在正確方向上邁出了一步。

【編輯推薦】

  1. Swing組件相關的操作
  2. TikeSwing創(chuàng)建MVC體系結(jié)構(gòu)
  3. 全面介紹Swing容器
  4. 淺析Accelerator key in Java Swing
  5. JFC和Swing中的JLabel組件
責任編輯:佚名 來源: 中國IT實驗室
相關推薦

2009-06-29 15:28:00

TableModelSwing開發(fā)

2012-01-17 14:09:54

JavaSwing

2009-07-15 09:06:07

BeanTableMoSwing

2009-07-14 09:52:10

TableModelESwing

2009-07-15 15:35:59

Swing程序Swing性能

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-10 17:20:38

Swing構(gòu)件AWT構(gòu)件

2009-07-14 15:01:02

AWT和Swing

2009-07-10 17:03:17

AWT組件Swing組件

2009-07-16 13:37:33

Swing和AWT

2009-07-15 16:39:51

AWT和Swing

2009-07-10 11:07:18

Swing和SWT

2009-07-17 10:11:55

AWT和Swing

2012-01-17 13:53:16

JavaSwing

2009-07-17 15:30:30

JFaceAWT和SWTSwing

2009-07-16 13:50:28

AWT和Swing

2009-07-17 09:36:14

SWT和Swing的區(qū)

2009-07-15 15:15:42

比較Swing和SWT

2012-01-17 17:21:24

JavaSwing

2009-07-14 16:02:04

SWT和Swing
點贊
收藏

51CTO技術棧公眾號