Swing核心組件有哪些

這篇文章主要介紹了Swing核心組件有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)公司從2013年開(kāi)始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元旬陽(yáng)做網(wǎng)站,已為上家服務(wù),為旬陽(yáng)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

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

基礎(chǔ)部分

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

◆組件(component)類本身,他負(fù)責(zé)提供創(chuàng)建、修改和查詢組件狀態(tài)的API
◆模型接口和和模型接口的默認(rèn)實(shí)現(xiàn),它負(fù)責(zé)處理組件的業(yè)務(wù)邏輯和組件改變通知
◆UI delegate 負(fù)責(zé)處理組件布局,事件處理(鼠標(biāo)和鍵盤(pán)事件)以及組件的繪制。

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

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

privatestaticfinalStringuiClassID="FlexiSliderUI";   publicvoidsetUI(FlexiSliderUIui){  super.setUI(ui);  }   publicvoidupdateUI(){  if(UIManager.get(getUIClassID())!=null){  setUI((FlexiSliderUI)UIManager.getUI(this));  }else{  setUI(newBasicFlexiSliderUI());  }  }   publicFlexiSliderUIgetUI(){  return(FlexiSliderUI)ui;  }   publicStringgetUIClassID(){  returnuiClassID;  }

這里需要注意的一點(diǎn)是:你需要提供一個(gè)可靠的UI delegate,如果當(dāng)前安裝的look and feel 沒(méi)有提供特殊的UI delegate時(shí),這個(gè)UI delegate將處理組件的繪制,布局和事件處理。


模型接口

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

publicstaticclassRange{  privatebooleanisDiscrete;   privatedoubleweight;   publicRange(booleanisDiscrete,doubleweight){  this.isDiscrete=isDiscrete;  this.weight=weight;  }   ...  }

模型中設(shè)置和查詢r(jià)ange的API

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

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

void addChangeListener(ChangeListener x);     void removeChangeListener(ChangeListener x);


模型實(shí)現(xiàn)

模型的實(shí)現(xiàn)類非常簡(jiǎn)單,參考DefaultBoundedRangeModel,變化監(jiān)聽(tīng)器(ChangeListeners)使用EventListenerList來(lái)保存。當(dāng)模型值被改變時(shí)將觸發(fā)ChangeEvent:

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

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Swing核心組件有哪些”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

當(dāng)前題目:Swing核心組件有哪些
標(biāo)題URL:http://bm7419.com/article20/igsgjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、微信小程序做網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、自適應(yīng)網(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)

商城網(wǎng)站建設(shè)