這篇文章主要介紹AWT和Swing模式有什么用,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今,先為石屏等服務(wù)建站,石屏等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為石屏企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
Sun在JDK 1.0最初發(fā)布了圖形API包,代號(hào)AWT (abstract windowing toolkit),里面除對(duì)GUI基本支持(如結(jié)合各OS的事件分發(fā)機(jī)制等)外,自有一套重量級(jí)開發(fā)GUI的思路,并提供了一組常規(guī)使用的重量級(jí)組件。所謂重量級(jí)組件就是每個(gè)組件都引用一個(gè)本地對(duì)等體peer成員對(duì)象,這個(gè)對(duì)等體對(duì)象利用本地系統(tǒng)GUI API繪制組件。后來(lái)在JDK1.1,AWT包中引進(jìn)了一套輕量級(jí)開發(fā)GUI的新思路,并提供了一組輕量級(jí)組件。所謂輕量級(jí)組件就是自身沒(méi)有本地對(duì)等體,而借助重量級(jí)組件作為容器來(lái)繪制組件。JDK 1.1之后,sun在開發(fā)GUI思路上,在效率,擴(kuò)展性等方面給出了很多創(chuàng)新,并基于這種新思路推出一套豐富的新組件(輕量級(jí)組件),sun為此打出一個(gè)新的響亮的代號(hào)---Swing,并推薦以后的GUI開發(fā)都應(yīng)該基于Swing的GUI開發(fā)思路開展,應(yīng)該使用或擴(kuò)展這套Swing的組件。
不論是AWT模式還是Swing模式,Sun的GUI開發(fā)思路都是純OO的。開發(fā)人員總是構(gòu)建多個(gè)組件對(duì)象實(shí)例來(lái)組合建立GUI,這些對(duì)象是因不同的輸入輸出表現(xiàn)被封裝為多種組件類的實(shí)例,而這些組件類是有合理的繼承關(guān)系因而容易擴(kuò)展的“套件”。而且兩種模式最基本的統(tǒng)一的程序運(yùn)行思路都是:
1.通過(guò)建立各種組件的實(shí)例來(lái)負(fù)責(zé)GUI的工作。
2. 約定出GUI變化時(shí)機(jī)—java應(yīng)用程序隨需發(fā)出請(qǐng)求調(diào)用或?qū)Σ僮飨到y(tǒng)級(jí)某種操作的監(jiān)聽(tīng)(如暴露被遮擋的窗口內(nèi)容)。
3. 在時(shí)機(jī)到來(lái)時(shí)由“框架程序”來(lái)判斷并調(diào)用應(yīng)該調(diào)用的目標(biāo)組件實(shí)例所提供的各種形式的paint方法(各組件在此方法里通過(guò)java 2d API包來(lái)實(shí)現(xiàn)自己的具體繪制邏輯)來(lái)完成各組件繪制。
4. 在GUI的整個(gè)生命周期里,通過(guò)以上的123模式來(lái)完成整個(gè)應(yīng)用界面的隨需而變。
下文將主要分析Swing模式。
Swing式 開發(fā)GUI的基本約定包括:Swing提供4個(gè)頂層容器JFrame,JDialog,JApplet,JWindow,如果是桌面應(yīng)用,則GUI必須要有一個(gè)JFrame,如果是瀏覽器應(yīng)用,則GUI必須要有一個(gè)JApplet。其他Swing組件,或自定義開發(fā)的Swing組件都擴(kuò)展自JComponent,并且其實(shí)例要存在于頂層容器的層次樹中。下面是一個(gè)符合約定的GUI的運(yùn)行分析。
這里的repaint將首先確定RepaintManager.HANDLE_TOP_LEVEL_PAINT-如果不支持將委托給 Component.repaint,形成PaintEvent并進(jìn)行提交走AWT模式。支持的話將促使RepaintManager加入重畫區(qū)后通過(guò)調(diào)度走Swing模式。Swing模式就是走RepaintManager的方式。自身的repaint不會(huì)去考慮每窗口雙緩存直接拷貝區(qū)域,因?yàn)檫@時(shí)的需求就是要求重新繪畫。輕量級(jí)Swing組件在自己的repaint方法去主動(dòng)創(chuàng)造繪畫時(shí)機(jī)。
JComponent.Repaint{RepaintManager.currentManager(this).addDirtyRegion}走Swing模式處理。
Swing模式都是借由RepaintManager來(lái)安排繪畫,它維護(hù)了一個(gè)幾何區(qū)域并負(fù)責(zé)重畫的框架。外界總是要求先加入RepaintManager重繪區(qū),在加入的同時(shí)激發(fā)起一個(gè)調(diào)度重畫的
SunToolkit.getSystemEventQueueImplPP(context). postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), processingRunnable))
注意,通過(guò)上文分析,對(duì)于頂層容器處理底層消息的觸發(fā)時(shí),走Swing處理模式而通過(guò)SwingpaintEventdispatcher 去創(chuàng)建painitevent時(shí)除向repaintmanager登記臟區(qū)(如果不使用每窗口雙緩存策略)外,還要額外post一個(gè) IgnorePaintEvent。該paintevent在隨后的EDT里按awt模式走peer處理時(shí)并沒(méi)有加入awt的重畫臟區(qū),實(shí)際上忽略掉了繪制意義,這樣做避免了在Swing和awt兩種模式的重復(fù)繪制,但同時(shí)形成依然將paint事件通知到組件的效果。
public void coalescePaintEvent(PaintEvent e) { Rectangle r = e.getUpdateRect(); if (!(e instanceof IgnorePaintEvent)) { paintArea.add(r, e.getID()); }
以上是“AWT和Swing模式有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章題目:AWT和Swing模式有什么用
鏈接分享:http://aaarwkj.com/article36/psoepg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)