Java用戶界面 模型-視圖-控制器(MVC)模式


Swing組件的MVC設計模式

  在解決一個問題時,不需要從頭做起,而是參考過去的經驗,設計模式是一種方法,以一種結構化的形式展示了前人的經驗。

  前面提到過的Java中的AWT事件處理機制采用了“觀察者”(Observer)模式

  本文要說的是Swing設計者采用的另一種著名的設計模式:模型-視圖-控制器(model-view-controller)模式

MVC設計模式

  用戶界面組件一般有三個要素:

    1.內容,如按鈕的狀態(是否按下),或者文本域的文本。

    2.外觀, 顏色,大小等等。

    3.行為,對輸入事件的反應。

  模型-視圖-控制器(MVC)模式,不是用一個類完成所有的事情,而是實現三個獨立的類:

    模型(model:存儲內容。

    視圖(view:顯示內容。

    控制器(controller:處理用戶輸入。

  這個模式明確地規定了三個對象如何進行交互。模型存儲內容,實現改變內容和查找內容的方法,它沒有用戶界面,模型是完全不可見的,顯示存儲在模型中的數據是視圖的工作。

  比如文本域的內容是容納當前文本的字符串對象,與視圖顯示的內容並不一致——如果內容的長度大於文本域的顯示長度,用戶只能看到顯示出來的那一部分。

  模型-視圖-控制器(model-view-controller)模式的一個優點是一個模型可以有多個視圖,其中每個視圖可以顯示全部內容的不同部分或不同方面。當通過某一個視圖的控制器對模型進行更新時,模型會把這種改變通知給所有視圖,視圖得到通知之后就會自動刷新。

  控制器負責處理用戶輸入事件,例如點擊鼠標和敲擊鍵盤,然后決定是否把這些事件轉化成對模型或視圖的改變。

  

 

程序員使用Swing組件

  程序員使用Swing組件通常不需要考慮它們的模型-視圖-控制器體系結構。

  每個用戶界面元素都有一個包裝器類(如JButton或JTextField)來保存模型和視圖。

  當需要查詢內容時,包裝器類會向模型詢問並返回結果。當想改變視圖時,包裝器類會把此請求發給視圖。然而有時候也需要直接同模型打交道。

  MVC模式允許實現可插觀感。每個按鈕或者文本域的模型是獨立於觀感的。通過把底層模型與用戶界面分離開,Swing設計者能夠重用模型的代碼,甚至在程序運行時對觀感進行切換。

Swing按鈕的MVC分析

  對於大多數組件來說,模型類實現了名字結尾為Model的接口。例如,按鈕類就實現了ButtonModel接口。

  每個JButton對象存儲一個按鈕模型對象,可以用下列形式得到它的引用。

    

JButton button = new JButton("Blue");

ButtonModel model = button.getModel();

 

  當使用Metal觀感時,JButton類用BasicButtonUI類作為其視圖,用ButtonUIListener類作為控制器。

  一般來說,每個Swing組件都有一個相關的后綴為UI的視圖對象,但並不是所有的Swing組件都有專門的控制器對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM