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

詳解所有的Swing核心組件

開發 后端
本文詳細介紹Swing核心組件,以及展示創建一個自定義組件,類似WINDOWS Vista Explorer 中新的 view slider。這個組件按看上去很像一個滑標嵌入一個pop-up menu。

當提到比較awt組件和Swing組件的區別時, 首先被提到的就是Swing 是輕量級的(lightweight).確切的說其按鈕、框架和菜單都沒有使用本地化控制(native controls).所有組件包括渲染和事件處理都是靠純java控制的。這給我們提供了很多方法去創建真正與平臺無關的組件,而創建一個在所有平臺上外觀一致的自定義組件并非一件簡單的事,這篇文章將演示如何創建自定義組件的過程并高亮顯示重點、步驟和易犯的錯誤。

基礎部分

Swing architecture overview這篇文章提供了非常優秀的Swing結構和開發的高級概述(high-level overview)。雖然創建組件要遵循一些規則會略微有點麻煩,不過最終代碼會更容易理解。它遵循”不重復發明輪子”的原則。最初你會想要把所有的東西都集中到一個類里,包括擴展API,模型處理(狀態和通知),事務處理,布局和繪制。但是按照MVC (model-view-controller)結構將其劃分為多個類可以讓你的組件代碼更容易理解,并且從長遠來說更加容易擴展。
所有Swing核心組件的主要部分如下:

◆組件(component)類本身,他負責提供創建、修改和查詢組件狀態的API
◆模型接口和和模型接口的默認實現,它負責處理組件的業務邏輯和組件改變通知
◆UI delegate 負責處理組件布局,事件處理(鼠標和鍵盤事件)以及組件的繪制。

本文將配圖展示創建一個自定義組件,類似WINDOWS Vista Explorer 中新的 view slider。這個組件按看上去很像一個滑標嵌入一個pop-up menu。但他和常規的JSlider又有所不同,首先,它會含有關聯標簽(labels)和圖標(icon)的選項(control points),其次,若range是相鄰的,(如Small Icons和Medium Icons),能夠動態的修改圖標大小,若range是非關聯的(如Tiles-Details),滑塊只能滑動到這些選項上,不能滑動到這些選項之間的位置。

Windows Vista OS 中的 View slider

組件類:UI Delegate 裝配
自定義組件的***個類就是組件本身的API,這個API足夠簡單并且委托大部分業務邏輯給模型(參考下一章),除此之外,為了設置合適的UI delegate,你需要增加一個樣板(boilerplate)(詳細介紹請參考Enhancing Swing Applications 一文),最終,你的代碼應該是類似這樣的:

  1. privatestaticfinalStringuiClassID="FlexiSliderUI";  
  2.  
  3. publicvoidsetUI(FlexiSliderUIui){  
  4. super.setUI(ui);  
  5. }  
  6.  
  7. publicvoidupdateUI(){  
  8. if(UIManager.get(getUIClassID())!=null){  
  9. setUI((FlexiSliderUI)UIManager.getUI(this));  
  10. }else{  
  11. setUI(newBasicFlexiSliderUI());  
  12. }  
  13. }  
  14.  
  15. publicFlexiSliderUIgetUI(){  
  16. return(FlexiSliderUI)ui;  
  17. }  
  18.  
  19. publicStringgetUIClassID(){  
  20. returnuiClassID;  

這里需要注意的一點是:你需要提供一個可靠的UI delegate,如果當前安裝的look and feel 沒有提供特殊的UI delegate時,這個UI delegate將處理組件的繪制,布局和事件處理。


模型接口

這可能是這個組件最重要的接口了。它將從業務層面表現的你的組件功能。模型接口不要包含任何和界面繪制相關的方法(像setFont或getPreferredSize)。我們的組件將遵循LinearGradientPaint API并且定義模型為一些range序列:

  1. publicstaticclassRange{  
  2. privatebooleanisDiscrete;  
  3.  
  4. privatedoubleweight;  
  5.  
  6. publicRange(booleanisDiscrete,doubleweight){  
  7. this.isDiscrete=isDiscrete;  
  8. this.weight=weight;  
  9. }  
  10.  
  11. ...  

模型中設置和查詢range的API

  1. public void setRanges(Range... range);     
  2. public int getRangeCount();       
  3. public Range getRange(int rangeIndex); 

這個模型還提供當前值對象的get和set方法:
模型接口的***一部分為增加/移除變化監聽器(ChangeListeners)的方法,他遵循Swing核心組件的model接口風格(參考BoundedRangeModel);

  1. void addChangeListener(ChangeListener x);     
  2. void removeChangeListener(ChangeListener x);    


模型實現

模型的實現類非常簡單,參考DefaultBoundedRangeModel,變化監聽器(ChangeListeners)使用EventListenerList來保存。當模型值被改變時將觸發ChangeEvent:

  1. protectedvoidfireStateChanged(){  
  2. ChangeEventevent=newChangeEvent(this);  
  3. Object[]listeners=listenerList.getListenerList();  
  4. for(inti=listeners.length-2;i>=0;i-=2){  
  5. if(listeners[i]==ChangeListener.class){  
  6. ((ChangeListener)listeners[i+1]).stateChanged(event);  
  7. }  
  8. }  

以上為Swing核心組件源代碼,我們從后向前檢索所有listener.提取出stateChanged方法實現來執行。相關方法非常簡單,檢查值是否有效,并且復制slider ranges數組(之所以這樣做是為了讓那些惡意程序代碼不能直接作用于model)

【編輯推薦】

  1. 淺談Java Swing的連接數據庫
  2. 介紹JFace、Swing、AWT和SWT
  3. 詳解SwingWorker與Swing程序
  4. 介紹輕量級Swing組件
  5. Swing組件都擴展自JComponent
責任編輯:佚名 來源: eNet硅谷動力
相關推薦

2009-07-17 12:54:13

2009-07-10 12:30:12

Swing組件

2023-02-09 08:01:12

核心組件非阻塞

2009-07-15 10:52:13

JTree組件

2009-07-10 18:06:59

JTree Swing

2009-07-15 13:06:38

Swing組件

2024-01-10 12:26:16

2019-05-28 12:03:59

vuejavascript前端

2009-07-10 16:29:32

Swing組件

2009-07-14 18:05:28

輕量級Swing組件

2009-07-17 14:38:51

輕量級Swing組件

2009-07-10 17:03:17

AWT組件Swing組件

2009-07-15 11:02:32

Swing組件

2009-07-14 17:21:42

Swing組件

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-17 14:57:41

SwingWorkerSwing程序

2009-07-15 16:18:08

JSci.swing包

2009-07-09 11:55:17

Swing模型過濾

2009-07-10 13:20:37

Swing容器組件

2009-07-17 13:24:55

Swing組件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产三级在线观看播放 | 偷拍自拍第一页 | 涩涩片影院 | 久久久99精品免费观看 | 精品中文字幕一区二区三区 | 欧美精品久久久久 | 看一级毛片视频 | 激情 婷婷 | 欧美日韩淫片 | 99热在线观看精品 | 中文字幕亚洲一区 | 97精品国产一区二区三区 | 在线观看www | 在线观看国产wwwa级羞羞视频 | 亚洲性视频网站 | 亚洲成人av在线播放 | 中文字幕亚洲欧美 | 国产色| 欧美激情啪啪 | 国产精品视频一区二区三区不卡 | 婷婷中文在线 | 久久精品国产一区二区电影 | 日韩精品一区二区三区免费观看 | 一区二区三区在线 | 欧 | 九九视频在线观看视频6 | 毛片免费视频 | 国产精品永久 | 99re在线| 色网站在线免费观看 | 麻豆av电影网 | 毛片国产| 欧美色综合天天久久综合精品 | 日韩欧美国产成人一区二区 | 一区二区福利视频 | 国产视频久久 | 一本一道久久a久久精品蜜桃 | 日韩视频 中文字幕 | 中文字幕一区二区三区日韩精品 | 亚洲一级毛片 | 久久国色 | 国产精品www |