資源描述:
《用戶界面組件課件》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、Swing用戶界面組件模型-視圖-控制器設計模式每個組件有三個要素內容,如按鈕的狀態(tài)(是否按下),或者文本域的文本;外觀,顏色,大小等;行為,對事件的反應;三要素之間的關系復雜Java模型-視圖-控制器設計模式Swing設計者采用了一種著名的設計模式:模型-視圖-控制器(model-view-controller)模式來實現(xiàn)組件的設計。實現(xiàn)一個組件有三個獨立的類:模型(model):存儲內容;視圖(view):顯示內容;控制器(controller):處理用戶輸入;Java模型-視圖-控制器設計模式模型只存儲內容,必須實現(xiàn)改變內容和查找內容
2、的方法。如,一個文本模型中的方法有:在當前文本中添加或者刪除字符以及把當前文本作為一個字符串返回等;模型完全不可見,視圖顯示存儲在模型中的數據;控制器負責處理用戶輸入事件,如點擊鼠標和敲擊鍵盤。然后決定是否把這些事件轉化為對模型或視圖的改變;Java模型-視圖-控制器設計模式Java模型、視圖、控制器對象之間的交互模型-視圖-控制器設計模式Swing按鈕的模型-視圖-控制器分析對于大多數組件,模型類實現(xiàn)了名字結尾為Model的接口,如:按鈕就實現(xiàn)了ButtonModel接口;可以通過查看ButtonModel接口中的方法來獲知按鈕模型維護的
3、是哪種類型的數據;Java模型-視圖-控制器設計模式Swing庫中包含了一個名為DefaultButtonModel的類,該類實現(xiàn)了ButtonModel接口,是JButton的模型類;該類同時也可作為單選按鈕、復選框等的模型類;視圖和感觀相關聯(lián),不同感觀對應的視圖有所不同;當使用Metal觀感時,JButton類用BasicButtonUI類作為其視圖,用ButtonUIListener類作為控制器;JButton是一個繼承了JComponent的包裝器類,包含了一個DefaultButtonModel對象,一些視圖數據以及一個負責按鈕視
4、圖的BasicButtonUI對象(Metal感觀);JButtonbutton=newJButton(“Blue”);ButtonModelmodel=button.getModel();ButtonUIui=button.getUI();Java布局管理器容器內的所有組件的排放由一個布局管理器(layoutmanager)進行管理。java.awt.Containercontainer.setLayout(LayoutObject);Java布局管理器常用布局管理器流布局管理器(FlowLayout)邊界布局管理器(BorderLayo
5、ut)網格布局管理器(GridLayout)Java布局管理器流布局管理器(FlowLayout)其特點是在一行上水平排列組件,直到沒有足夠的空間為止,再開始新的一行;面板(JPanel)的默認布局管理器;當用戶縮放容器時,布局管理器自動地調整組件的位置使其填充可用的空間;但容器中組件的大小不會變;默認情況下,組件是在一行上居中顯示。程序員可以設置容器中的組件按左對齊或者右對齊的方式排列;panel.setLayout(newFlowLayout(FlowLayout.LEFT));Java布局管理器流布局管理器(FlowLayout)ja
6、va.awt.Layout;FlowLayout();FlowLayout(intalign);FlowLayout(intalign,inthgap,intvgap);常用的行對齊方式FlowLayout.CENTER;FlowLayout.LEFT;FlowLayout.RIGHT;Java布局管理器邊界布局管理器(BorderLayout)將整個容器分為中部、北部、南部、東部或者西部五個區(qū)域;程序員可以選擇將組件放在哪個區(qū)域;默認放在中部;JFrame的內容窗格的默認布局管理器;frame.add(button,BorderLayou
7、t.SOUTH);Java布局管理器邊界布局管理器(BorderLayout)邊界布局管理器在安放組件時,會先放入邊緣組件,剩余的可用空間由中間組件占用,如果有某個邊緣組件空缺,其它組件會填充該邊緣位置;容器縮放時,邊界布局會擴大所有組件的尺寸以便填充可用空間,但邊緣組件的厚度不會改變,長度會有所改變,而中間組件的大小會發(fā)生變化;Java布局管理器java.awt.BorderLayout類BorderLayout();BorderLayout(inthgap,intvgap);Java布局管理器將一個組件放在邊界布局管理器的某個部分時,其
8、會填充整個部分的空間,如果此時再放入另一個組入到相同的部分,則后放入的組件會覆蓋前一個組件;publicclassBorderLayoutTest{publicstaticvoi