![通過(guò)JavaSwing看透MVC設(shè)計(jì)模式1_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/19/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc1.gif)
![通過(guò)JavaSwing看透MVC設(shè)計(jì)模式1_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/19/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc2.gif)
![通過(guò)JavaSwing看透MVC設(shè)計(jì)模式1_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/19/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc3.gif)
![通過(guò)JavaSwing看透MVC設(shè)計(jì)模式1_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/19/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc4.gif)
![通過(guò)JavaSwing看透MVC設(shè)計(jì)模式1_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-10/19/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc/d75c6624-9414-4ce6-a1b8-bf4db1e0d1fc5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、通過(guò)java swing看透mvc設(shè)計(jì)模式 1一個(gè)好的用戶界面(gui)的設(shè)計(jì)通??梢栽诂F(xiàn)實(shí)世界找到相應(yīng)的表現(xiàn)。例如,如果在您的面前擺放著一個(gè)類似于電腦鍵盤按鍵的一個(gè)簡(jiǎn)單的按鈕,然而就是這么簡(jiǎn)單的一個(gè)按鈕,我們就可以看出一個(gè)gui設(shè)計(jì)的規(guī)則,它由兩個(gè)主要的部分構(gòu)成,一部分使得它具有了按鈕應(yīng)該具有的動(dòng)作特性,例如可以被按下。另外一部分則負(fù)責(zé)它的表現(xiàn),例如這個(gè)按鈕是代表了a還是b??辞宄@兩點(diǎn)你就發(fā)現(xiàn)了一個(gè)很強(qiáng)大的設(shè)計(jì)方法,這種方法鼓勵(lì)重用reuse,而不是重新設(shè)計(jì)redesign。你發(fā)現(xiàn)按鈕都有相同的機(jī)理,你只要在按鈕的頂上噴上不同的字母便能制造出“不同”的按鈕,而不用為了每個(gè)按鈕而重新設(shè)計(jì)一份
2、圖紙。這大大減輕了設(shè)計(jì)工作的時(shí)間和難度。如果您把上述設(shè)計(jì)思想應(yīng)用到軟件開(kāi)發(fā)領(lǐng)域,那么取得相似的效果一點(diǎn)都不讓人驚奇。一個(gè)在軟件開(kāi)發(fā)領(lǐng)域應(yīng)用的非常廣泛的技術(shù)model/view/controller(mvc)便是這種思想的一個(gè)實(shí)現(xiàn)。這當(dāng)然很不錯(cuò),但是或許您又開(kāi)始疑惑這和java基礎(chǔ)類jfc(java foundation class)中的用戶界面設(shè)計(jì)部分(swing)又有什么關(guān)系呢?好的,我來(lái)告訴你。盡管mvc設(shè)計(jì)模式通常是用來(lái)設(shè)計(jì)整個(gè)用戶界面(gui)的,jfc的設(shè)計(jì)者們卻獨(dú)創(chuàng)性的把這種設(shè)計(jì)模式用來(lái)設(shè)計(jì)swing中的單個(gè)的組件(component),例如表格jtable,樹(shù)jtree,組合下拉
3、列表框jcombobox等等等等。這些組件都有一個(gè)model,一個(gè)view,一個(gè)controller,而且,這些model,view,controller可以獨(dú)立的改變,就是當(dāng)組件正在被使用的時(shí)候也是如此。這種特性使得開(kāi)發(fā)gui界面的工具包顯得非常的靈活。mvc設(shè)計(jì)模式把一個(gè)軟件組件區(qū)分為三個(gè)不同的部分,model,view,controller。model是代表組件狀態(tài)和低級(jí)行為的部分,它管理著自己的狀態(tài)并且處理所有對(duì)狀態(tài)的操作,model自己本身并不知道使用自己的view和controller是誰(shuí),系統(tǒng)維護(hù)著它和view之間的關(guān)系,當(dāng)model發(fā)生了改變系統(tǒng)還負(fù)責(zé)通知相應(yīng)的view。vie
4、w代表了管理model所含有的數(shù)據(jù)的一個(gè)視覺(jué)上的呈現(xiàn)。一個(gè)model可以有一個(gè)以上的view,但是swing中卻很少有這樣的情況。controller管理著model和用戶之間的交互的控制。它提供了一些方法去處理當(dāng)model的狀態(tài)發(fā)生了變化時(shí)的情況。使用鍵盤上的按鈕的例子來(lái)說(shuō)明一下:model就是按鈕的整個(gè)機(jī)械裝置,view/controller就是按鈕的表面部分。下面的圖解釋了如何把一個(gè)jfc開(kāi)發(fā)的用戶界面分為model,view,controller,注意,view/controller被合并到了一起,這是mvc設(shè)計(jì)模式通常的用法,它們提供了組件的用戶界面(ui)。用button的例子詳細(xì)
5、說(shuō)明為了更好的理解mvc設(shè)計(jì)模式和swing用戶界面組件之間的關(guān)系,讓我們更加深入的進(jìn)行分析。我將采用最常見(jiàn)的組件button來(lái)說(shuō)明。我們從model來(lái)開(kāi)始。model一個(gè)按鈕的model所應(yīng)該具備的行為由一個(gè)接口buttonmodel來(lái)完成。一個(gè)按鈕model實(shí)例封裝了其內(nèi)部的狀態(tài),并且定義了按鈕的行為。它的所有方法可以分為四類:1、查詢內(nèi)部狀態(tài)2、操作內(nèi)部狀態(tài)3、添加和刪除事件監(jiān)聽(tīng)器4、發(fā)生事件其他用戶界面組件有他們各自的與組件相關(guān)的model都提供這四個(gè)類方法.view&controller上面的圖中講述一個(gè)按鈕的view/controller由一個(gè)借口buttonui完成.如果
6、一個(gè)類實(shí)現(xiàn)了這個(gè)借口,那么它將會(huì)負(fù)責(zé)創(chuàng)建一個(gè)用戶界面,處理用戶的操作.它的所有方法可以被分為三大類:1.繪制paint2.返回幾何類型的信息3.處理awt事件其他用戶界面組件有他們自己的組件相關(guān)的view/controller,但是他們都提供上述三類方法.程序員通常并不會(huì)直接和model以及view/controller打交道,他們通常隱藏于那些繼承自java.awt.component的組件里面了,這些組件就像膠水一樣把mvc三者合三為一。也正是由于這些繼承的組件對(duì)象,一個(gè)程序員可以很方便的混合使用swing組件和awt組件,然后,我們知道,swing組件有很多都是直接繼承自相應(yīng)的awt組件
7、,它能提供比awt組件更加方便易用的功能,所以通常情況下,我們沒(méi)有必要混合使用兩者。實(shí)例現(xiàn)在我們已經(jīng)明白了java類與mvc各個(gè)部分的對(duì)應(yīng)關(guān)系,我們可以更加深入一點(diǎn)去分析問(wèn)題了。下面我們將要講述一個(gè)小型的使用mvc模式開(kāi)發(fā)的例子。因?yàn)閖fc十分的復(fù)雜,我只能把我的例子局限于一個(gè)用戶界面組件里面(button)讓我們來(lái)看看這個(gè)例子的所有部分吧:button類最顯而易見(jiàn)的開(kāi)始的地方就是代表了按鈕組件本省的代碼,因?yàn)檫@個(gè)類是大部分程序員會(huì)接觸的。就像我前面提到的,按鈕用戶界面組件類實(shí)際上就是model和view/controller的之間的黏合劑。每個(gè)按鈕組件都和一個(gè)model以及一個(gè)control
8、ler關(guān)聯(lián),model定義了按鈕的行為,而view/controller定義了按鈕的表現(xiàn)。而應(yīng)用程序可以在任何事件改變這些關(guān)聯(lián)。讓我們看看得以實(shí)現(xiàn)此功能的代碼。public void setmodel(buttonmodel buttonmodel)if (this.buttonmodel != null)this.buttonmodel.removechangelistener(buttonchangelistenerthis.buttonmodel.removeactionlistener(buttonactionlistener);buttonchangelistener = null;
9、buttonactionlistener = null;this.buttonmodel = buttonmodel;if (this.buttonmodel != null)buttonchangelistener = new buttonchangelistener();buttonactionlistener = new buttonactionlistener();this.buttonmodel.addchangelistener(buttonchangelistener);this.buttonmodel.addactionlistener(buttonactionlistener
10、);updatebutton();public void setui(buttonui buttonui)if (this.buttonui != null)this.buttonui.uninstallui(this);this.buttonui = buttonui;if (this.buttonui != null)this.buttonui.installui(this);updatebutton();public void updatebutton()invalidate();buttonmodel類buttonmodel維護(hù)著三種類型的狀態(tài)信息:是否被按下(pressed),是否“
11、武裝上了”(armed),是否被選擇(selected)。它們都是boolean類型的值。一個(gè)按鈕被按下(pressed)是指當(dāng)鼠標(biāo)在按鈕上面的時(shí)候,按下鼠標(biāo)但是還沒(méi)有松開(kāi)鼠標(biāo)按鈕的狀態(tài),及時(shí)用戶此時(shí)把鼠標(biāo)拖拽到按鈕的外面也沒(méi)有改變這種狀態(tài)。一個(gè)按鈕是否“武裝了”(armed)是指按鈕被按下,并且鼠標(biāo)還在按鈕的上面。一些按鈕還可能被選擇(selected),這種狀態(tài)通過(guò)重復(fù)的點(diǎn)擊按鈕取得true或者false的值。下面的代碼是狀態(tài)pressed的一個(gè)缺省的實(shí)現(xiàn)。狀態(tài)armed以及selected實(shí)現(xiàn)的代碼與之類似。buttonmodel類應(yīng)該被繼承,這樣可以覆蓋缺省的狀態(tài)定義,實(shí)現(xiàn)有個(gè)性的按鈕
12、。private boolean boolpressed = false;public boolean ispressed()return boolpressed;public void setpressed(boolean boolpressed)this.boolpressed = boolpressed;firechangeevent(new changeevent(button);按鈕的模型button model還負(fù)責(zé)通知其他對(duì)象(事件監(jiān)聽(tīng)器)他們所感興趣的事件.從下面的代碼中我們可以看出當(dāng)按鈕的狀態(tài)發(fā)生改變的時(shí)候就會(huì)發(fā)出一個(gè)changeevent.下面就是代碼:private ve
13、ctor vectorchangelisteners=new vector();public void addchangelistener(changelistener changelistener)vectorchangelisteners.addelement(changelistener);public void removechangelistener(changelistener changelistener)vectorchangelisteners.removeelemet(changelistener);protected void firechangeevent(changeevent changeeve
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度全地形挖掘機(jī)械購(gòu)置合同
- 2025年度原木深加工產(chǎn)品研發(fā)合作協(xié)議
- 2023-2024學(xué)年安徽省六安市高二下學(xué)期6月月考?xì)v史試卷
- 2025年能源互聯(lián)網(wǎng)策劃合作發(fā)展共識(shí)協(xié)議
- 2025年公共設(shè)施改善合作協(xié)議
- 2025年自營(yíng)批發(fā)服務(wù)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025年企業(yè)合同管理咨詢協(xié)議
- 2025年飛機(jī)燃油系統(tǒng)項(xiàng)目申請(qǐng)報(bào)告模范
- 2025年分店銷售委托合同實(shí)施效果評(píng)價(jià)
- 2025年鋼增強(qiáng)塑料復(fù)合管項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 排水溝施工合同電子版(精選5篇)
- 清新典雅文藝教師公開(kāi)課說(shuō)課PPT課件模板
- 大氣商務(wù)企業(yè)培訓(xùn)之團(tuán)隊(duì)合作的重要性PPT模板
- 2022年四川省成都市成華區(qū)七年級(jí)下學(xué)期期末語(yǔ)文試卷
- 石油化工、煤化工、天然氣化工優(yōu)劣勢(shì)分析
- 10kV配網(wǎng)工程變配電(臺(tái)架變、箱變、電纜分接箱)的安裝設(shè)計(jì)施工精細(xì)化標(biāo)準(zhǔn)
- Q∕GDW 12118.3-2021 人工智能平臺(tái)架構(gòu)及技術(shù)要求 第3部分:樣本庫(kù)格式
- 廣東省義務(wù)教育階段學(xué)生轉(zhuǎn)學(xué)轉(zhuǎn)出申請(qǐng)表(樣本)
- 畢業(yè)論文牛仔布染色工藝和質(zhì)量控制
- 機(jī)耕路工程施工方案與技術(shù)措施
- 如何成為一個(gè)優(yōu)秀的生產(chǎn)經(jīng)理
評(píng)論
0/150
提交評(píng)論