成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談不論是AWT還是Swing模式

開發(fā) 后端
本文簡單介紹是不論是AWT還是Swing模式,以及介紹兩種模式最基本的統(tǒng)一的程序運(yùn)行思路都是。

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

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

1.通過建立各種組件的實(shí)例來負(fù)責(zé)GUI的工作。

2. 約定出GUI變化時機(jī)—java應(yīng)用程序隨需發(fā)出請求調(diào)用或?qū)Σ僮飨到y(tǒng)級某種操作的監(jiān)聽(如暴露被遮擋的窗口內(nèi)容)。

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

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

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

Swing模式都是借由RepaintManager來安排繪畫,它維護(hù)了一個幾何區(qū)域并負(fù)責(zé)重畫的框架。外界總是要求先加入RepaintManager重繪區(qū),在加入的同時激發(fā)起一個調(diào)度重畫的

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

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

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

【編輯推薦】

  1. 淺談Swing中的Look&Feel
  2. Swing組件大全隨著Java風(fēng)潮一起來席卷國內(nèi)
  3. 全面比較Swing與SWT
  4. Swing程序中調(diào)用JavaFX代碼
  5. SWT和Swing代碼的區(qū)別
責(zé)任編輯:佚名 來源: 電子工業(yè)出版社
相關(guān)推薦

2009-07-10 17:20:38

Swing構(gòu)件AWT構(gòu)件

2009-07-17 13:24:55

Swing組件

2009-07-10 15:41:27

Swing AWT

2009-07-14 15:01:02

AWT和Swing

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-16 13:37:33

Swing和AWT

2009-07-15 16:39:51

AWT和Swing

2009-07-10 17:03:17

AWT組件Swing組件

2009-07-17 09:36:14

SWT和Swing的區(qū)

2009-07-17 10:11:55

AWT和Swing

2009-07-16 13:50:28

AWT和Swing

2009-07-17 15:30:30

JFaceAWT和SWTSwing

2009-07-16 16:01:55

EventQueue

2009-07-17 09:07:20

2009-07-27 10:35:24

高亮Javascrip

2009-07-14 18:28:58

Swing入門

2009-07-15 13:06:38

Swing組件

2009-07-15 14:29:24

構(gòu)造JListSwing

2009-07-17 10:01:14

Swing和AWT

2009-07-14 12:58:49

AWT和Swing
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产午夜高清 | 国产精品欧美精品日韩精品 | 九九热在线视频 | 免费看国产精品视频 | 国产一区二区三区 | 超碰在线人人干 | 国产欧美日韩一区 | 国产成人精品a视频一区www | 91麻豆精品国产91久久久久久 | 最新国产在线 | 成人在线看片 | 久久久久久亚洲精品 | 日韩精品一区二区三区视频播放 | 巨大荫蒂视频欧美另类大 | 久草99 | 久久国内| 成人中文字幕在线观看 | 久久精品中文 | 亚洲最新网址 | 一区二区三区四区五区在线视频 | 日本一本在线 | 亚洲一区二区三区四区五区中文 | 一区二区三区网站 | 欧美日韩国产一区二区三区 | 色必久久 | 99爱在线免费观看 | 久久综合一区 | 黑人一级黄色大片 | 精品国产一区二区三区四区在线 | 中文字幕亚洲视频 | 91免费看片| 久久精品免费 | 欧美女优在线观看 | 国产一区亚洲 | 日本在线中文 | 成人精品鲁一区一区二区 | 国产欧美精品区一区二区三区 | 一级毛片免费完整视频 | 福利视频三区 | 国产精品一区二区视频 | 国产精品国色综合久久 |