中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

AWT和Swing模式有什么用

發布時間:2021-12-28 09:26:29 來源:億速云 閱讀:178 作者:小新 欄目:編程語言

這篇文章主要介紹AWT和Swing模式有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Sun在JDK 1.0最初發布了圖形API包,代號AWT (abstract windowing toolkit),里面除對GUI基本支持(如結合各OS的事件分發機制等)外,自有一套重量級開發GUI的思路,并提供了一組常規使用的重量級組件。所謂重量級組件就是每個組件都引用一個本地對等體peer成員對象,這個對等體對象利用本地系統GUI API繪制組件。后來在JDK1.1,AWT包中引進了一套輕量級開發GUI的新思路,并提供了一組輕量級組件。所謂輕量級組件就是自身沒有本地對等體,而借助重量級組件作為容器來繪制組件。JDK 1.1之后,sun在開發GUI思路上,在效率,擴展性等方面給出了很多創新,并基于這種新思路推出一套豐富的新組件(輕量級組件),sun為此打出一個新的響亮的代號---Swing,并推薦以后的GUI開發都應該基于Swing的GUI開發思路開展,應該使用或擴展這套Swing的組件。

不論是AWT模式還是Swing模式,Sun的GUI開發思路都是純OO的。開發人員總是構建多個組件對象實例來組合建立GUI,這些對象是因不同的輸入輸出表現被封裝為多種組件類的實例,而這些組件類是有合理的繼承關系因而容易擴展的“套件”。而且兩種模式最基本的統一的程序運行思路都是:

1.通過建立各種組件的實例來負責GUI的工作。

2. 約定出GUI變化時機—java應用程序隨需發出請求調用或對操作系統級某種操作的監聽(如暴露被遮擋的窗口內容)。

3. 在時機到來時由“框架程序”來判斷并調用應該調用的目標組件實例所提供的各種形式的paint方法(各組件在此方法里通過java 2d API包來實現自己的具體繪制邏輯)來完成各組件繪制。

4. 在GUI的整個生命周期里,通過以上的123模式來完成整個應用界面的隨需而變。
下文將主要分析Swing模式。
Swing式 開發GUI的基本約定包括:Swing提供4個頂層容器JFrame,JDialog,JApplet,JWindow,如果是桌面應用,則GUI必須要有一個JFrame,如果是瀏覽器應用,則GUI必須要有一個JApplet。其他Swing組件,或自定義開發的Swing組件都擴展自JComponent,并且其實例要存在于頂層容器的層次樹中。下面是一個符合約定的GUI的運行分析。

這里的repaint將首先確定RepaintManager.HANDLE_TOP_LEVEL_PAINT-如果不支持將委托給 Component.repaint,形成PaintEvent并進行提交走AWT模式。支持的話將促使RepaintManager加入重畫區后通過調度走Swing模式。Swing模式就是走RepaintManager的方式。自身的repaint不會去考慮每窗口雙緩存直接拷貝區域,因為這時的需求就是要求重新繪畫。輕量級Swing組件在自己的repaint方法去主動創造繪畫時機。
JComponent.Repaint{RepaintManager.currentManager(this).addDirtyRegion}走Swing模式處理。

Swing模式都是借由RepaintManager來安排繪畫,它維護了一個幾何區域并負責重畫的框架。外界總是要求先加入RepaintManager重繪區,在加入的同時激發起一個調度重畫的

SunToolkit.getSystemEventQueueImplPP(context).  postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(),  processingRunnable))

注意,通過上文分析,對于頂層容器處理底層消息的觸發時,走Swing處理模式而通過SwingpaintEventdispatcher 去創建painitevent時除向repaintmanager登記臟區(如果不使用每窗口雙緩存策略)外,還要額外post一個 IgnorePaintEvent。該paintevent在隨后的EDT里按awt模式走peer處理時并沒有加入awt的重畫臟區,實際上忽略掉了繪制意義,這樣做避免了在Swing和awt兩種模式的重復繪制,但同時形成依然將paint事件通知到組件的效果。

public void coalescePaintEvent(PaintEvent e) {          Rectangle r = e.getUpdateRect();          if (!(e instanceof IgnorePaintEvent)) {              paintArea.add(r, e.getID());          }

以上是“AWT和Swing模式有什么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤山市| 乌苏市| 宜昌市| 深水埗区| 前郭尔| 芮城县| 离岛区| 阿克陶县| 闸北区| 克东县| 翼城县| 祁连县| 九寨沟县| 枣阳市| 东乌| 沂南县| 弥渡县| 沁阳市| 囊谦县| 虎林市| 扶绥县| 教育| 海林市| 兴业县| 喀什市| 沭阳县| 海阳市| 灵璧县| 上栗县| 长宁区| 突泉县| 浑源县| 宜兰市| 盈江县| 平昌县| 株洲市| 海宁市| 石嘴山市| 左贡县| 青州市| 三江|