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

描述Swing實現的目標

開發 后端
本文描述Swing實現的目標,將開發java界面的開發人員分為兩類,開發獨立的組件和為某應用程序構建GUI。

Swing實現的目標

按Swing實現的目標,將開發java界面的開發人員分為兩類:首先是開發獨立的組件,這些組件與具體應用無關,Swing自身也提供了一套,開發者也可以開發自己的組件,這些人是組件開發者角色;然后是為某應用程序構建GUI,則是使用那些組件類建立組件實例,并且通過建立容器關系來實現界面需求,這些是GUI開發者角色。從這個清晰的劃分出發可以體會Swing面向OO開發的精神。組件開發者開發的每一個組件面向所有應用,是一個高度抽象,打包封裝好的類,因此高度復用;而GUI開發者的開發過程則是根據需要繼續 OO---,首先整個應用界面職責被封裝成一個類,該類的實例的生命周期就代表了整個應用界面的生命周期,再從應用領域角度進行界面職責劃分,利用容器概念,快速通過聚合,定制組件實例打造出承擔各個細分應用領域界面交互職責的“面板類/頁面類”,***應用界面類實例將在整個生命周期內不斷耦合托付各類“ 面板類/頁面類”實例(一般通過“頁面接口”實現動態性)來完成全部界面交互職責。

反過來說,Swing也正是為了這樣的oo實踐需要而誕生的。在以上描述的gui構建中,最頻繁的就是通過容器組裝出特定面板組件來。那么如何定制子組件在容器面板上的分布呢?

Swing實現的目標是Container中可以setLayout(LayoutManager mgr),該mgr給出了一種布局方式,比如按五位圖布局還是表格布局;而子組件加入容器時可以給出針對此容器布局方式的各自的布局信息, Container.add(Component comp, Object constraints);***當繪制該容器的子組件時根據這些布局信息計算出各組件合適的大小位置等信息進行繪制即可。不過在Swing中,為了提高性能,不是每次繪制時都重新根據布局信息計算該如何繪制子組件,而是將在一次處理過程中把根據布局信息計算的繪制要求存儲在子組件和容器中,比如調整后的子組件的位置,容器的合適大小等,以后繪制時直接繪制;除非此后發生布局變化,比如容器remove掉一個子組件,將要導致一次重新計算布局信息的處理過程;由于Swing中的組件關系是一層包一層,某一層的變化可能導致整個樹都需要重新計算,這就和repaint的場景類似了,也因此,Swing將采取類似repaint的提交請求等待處理的模式,就是傳說中的revalidate。下面看jre1.7中具體的實現:

  1. PublicclassJComponent{  
  2. publicvoidrevalidate(){  
  3. if(getParent()==null){  
  4. return;  
  5. }  
  6. if(SwingUtilities.isEventDispatchThread()){  
  7. invalidate();//使該組件布局失效  
  8. RepaintManager.currentManager(this).addInvalidComponent(this);//向RM請求一次重布局  
  9. }  
  10. else{//如果不是在EDT中調用需要調整到EDT中。  
  11. //ToavoidafloodofRunnableswhenconstructingGUIsoff  
  12. //theEDT,aflagismaintainedastowhetherornot  
  13. //aRunnablehasbeenscheduled.  
  14. synchronized(this){  
  15. if(getFlag(REVALIDATE_RUNNABLE_SCHEDULED)){  
  16. return;  
  17. }  
  18. setFlag(REVALIDATE_RUNNABLE_SCHEDULED,true);  
  19. }  
  20. RunnablecallRevalidate=newRunnable(){  
  21. publicvoidrun(){  
  22. synchronized(JComponent.this){  
  23. setFlag(REVALIDATE_RUNNABLE_SCHEDULED,false);  
  24. }  
  25. revalidate();  
  26. }  
  27. };  
  28. SwingUtilities.invokeLater(callRevalidate);  
  29. }  

【編輯推薦】

  1. 介紹JavaFX功能與Swing的關系
  2. 淺談Swing中lookandfeel源代碼
  3. 概述Swing中的Timer對象
  4. 淺析Swing中actionPerformed()方法
  5. 詳解所有的Swing核心組件
責任編輯:佚名 來源: 天涯問答
相關推薦

2009-07-17 09:07:20

2010-04-12 17:30:44

Oracle SQL調

2009-07-15 10:06:54

Swing實現MDI

2009-07-10 14:26:28

實現SwingActionListe

2009-07-15 15:35:59

Swing程序Swing性能

2009-07-15 14:10:26

Swing控件

2009-09-17 09:24:57

Linq實現分頁

2009-09-04 13:22:31

C#實現多個接口

2021-06-30 09:56:19

物聯網設備物聯網IOT

2009-08-31 17:53:20

C#實現索引器

2010-03-19 10:36:52

Python RUD功

2010-04-21 10:23:13

Oracle實現

2010-07-07 17:00:15

SQL Server傳

2010-08-09 10:00:25

DB2數據移動

2010-08-18 17:15:23

DB2 實現split

2021-06-18 06:02:24

內核文件傳遞

2009-07-15 11:02:32

Swing組件

2009-07-14 15:01:02

AWT和Swing

2009-07-14 17:21:42

Swing組件

2009-07-10 14:41:57

Swing技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美一级精品久久 | 欧美国产视频一区二区 | 精品一区国产 | 亚洲一区二区三区观看 | 日韩2020狼一二三 | 久久一区二区三区四区五区 | 久久久久一区 | 伊人久久一区二区 | 男人av在线播放 | 91久久久久久久久 | 亚洲 精品 综合 精品 自拍 | 在线看日韩 | 91精品中文字幕一区二区三区 | 中文字幕亚洲精品 | 懂色av一区二区三区在线播放 | 国产精品www| 久久精品青青大伊人av | 欧美日韩精品 | 不卡在线一区 | 国产精品美女 | 岛国一区| 亚洲一区中文字幕 | 91操操操 | 亚洲欧美日韩在线不卡 | wwwsihu| 国产黑丝av | 韩日精品一区 | 黄a免费看 | 久久伊人青青草 | 日韩精品一区二区三区在线播放 | 91豆花视频 | 一区二区三区四区在线视频 | 情侣酒店偷拍一区二区在线播放 | jlzzjlzz欧美大全 | 一级片在线观看 | 亚洲成人av在线播放 | 国产黄色在线观看 | 午夜久草| 成人做爰www免费看视频网站 | 欧美日韩国产一区二区三区 | h视频亚洲 |