999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

JDK 7.0中實(shí)現(xiàn)半透明窗體

2011-12-31 00:00:00丁黎明

摘要:AWT是Abstract Windowing Toolkit的縮寫,包含Java語言建立和設(shè)置圖形用戶界面的基本工具,是基礎(chǔ)類的一部分。JDK 7.0即將發(fā)布,這個版本中AWT正式支持半透明窗體。文章介紹了不同層面上的半透明效果,給出使用方法和條件,并從源代碼的角度分析實(shí)現(xiàn)機(jī)制,為開發(fā)、測試和維護(hù)提供依據(jù)。

關(guān)鍵詞:AWT 窗體 半透明 像素級

在JDK 6 update 10 build 12中,Java語言引入了com.sun.awt.AWTUtilities類,可以實(shí)現(xiàn)半透明窗體效果,但在實(shí)際開發(fā)中并不推薦使用,原因是該類沒有出現(xiàn)在JDK的主要版本中,只是一種附加的臨時方案,獨(dú)立于AWT存在。在即將發(fā)布的JDK 7.0中,該類被移除,取而代之的是AWT中出現(xiàn)的一些新方法,用于正式支持半透明窗體,可以實(shí)現(xiàn)整體、背景和像素層面上的半透明效果。為敘述方便,文中java.awt包中的類名采用簡稱,其余類名采用規(guī)范化名稱。

1 整體半透明

在AWT中,F(xiàn)rame類和Dialog類是首選的頂層窗口,帶有標(biāo)題和邊框,易于使用,前者可以生成普通窗口,后者可以生成各種類型的對話框。在JDK 7.0中,它們可以實(shí)現(xiàn)半透明效果,請參考以下代碼,同樣適用于Dialog類。

Frame f=new Frame();

f.setOpacity(0.5f);

以上代碼中setOpacity方法設(shè)置整個窗口的不透明度為0.5,窗口上的邊框、標(biāo)題欄和子元素的效果也受到影響。該方法實(shí)際上在父類Window中實(shí)現(xiàn),內(nèi)部使用synchronized關(guān)鍵字同步,是線程安全的,簽名如下:public void setOpacity(float opacity)

參數(shù)opacity(不透明度)是單精度浮點(diǎn)類型,在區(qū)間[0,1]上,如果超出范圍,會拋出java.lang.IllegalArgumentException異常。Window處于全屏狀態(tài)時不支持半透明,會導(dǎo)致IllegalComponentStateException異常,可根據(jù)GraphicsDevice類的getFullScreenWindow方法返回值判斷Window狀態(tài);底層系統(tǒng)不支持半透明則拋出java.lang.UnsupportedOperationException異常,可使用以下代碼判斷應(yīng)用環(huán)境是否滿足半透明需要:

GraphicsConfiguration gc=f.getGraphicsConfiguration();

GraphicsDevice gd=gc.getDevice();

if(gc.getDevice().getFullScreenWindow() == this) {

//當(dāng)前窗體處于全屏狀態(tài)

}

if(!gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT)){

//底層系統(tǒng)不支持半透明

}

2 背景半透明

Component類具有圖形表示能力,可以在屏幕上顯示,與用戶交互,它的setBackground方法可以設(shè)置組件的背景色。Window類是Component類的后代,提供了新的setBackground方法方法支持半透明,部分內(nèi)容摘抄如下:

public void setBackground(Color bgColor){

//此處省略從新舊兩個背景色中提取alpha分量

if((oldAlpha==255)(alpha<255)){

setLayersOpaque(this,1);

}else if((oldAlpha<255)(alpha==255)){

setLayersOpaque(this,true);

}

}

參數(shù)bgColor表示顏色,內(nèi)部封裝了紅、綠、藍(lán)和alpha共四個分量,新的setBackground方法在調(diào)用舊方法后,根據(jù)前后兩個背景色中的alpha分量判斷是否使用不透明。如果原背景色不透明(alpha分量等于255)而新背景色透明(alpha分量小于255),則關(guān)閉不透明;反之則啟用不透明以提高性能。與整體半透明類似,該方法在全屏或底層系統(tǒng)不支持的情況下也會拋出異常;該方法還需要像素級半透明支持,如果底層系統(tǒng)不支持則拋出java.lang.UnsupportedOperationException異常,可使用以下代碼判斷是否支持像素級半透明:GraphicsConfiguration gc=f.getGraphicsConfiguration();

GraphicsDevice gd=gc.getDevice();

if(gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSLUCENT)){

//不支持像素級半透明,不能使用背景半透明

}

3 像素級半透明

Graphics類是所有圖形上下文的抽象基類,允許應(yīng)用程序在組件以及閉屏圖像上進(jìn)行繪制,它的setColor方法可以設(shè)置繪制時使用的顏色。在JDK 7.0中,可以通過Graphics實(shí)例在組件上繪制各種形狀的圖形甚至單個像素點(diǎn),支持半透明。參考以下代碼,在Frame上填充半透明的矩形區(qū)域。

Frame f=new Frame(){

public void paint(Graphics g){

g.setColor(new Color(255,0,0,127));

g.fillRect(0,0,100,100);

}

};

f.setBackground(new Color(0,0,0,0));

代碼中最后一行設(shè)置窗體的背景色完全透明,是為了能夠看到矩形區(qū)域的半透明效果。像素級半透明的使用條件與背景半透明相同。

4 結(jié)語

在JDK 7.0中,AWT的功能得到了拓展,雖然開發(fā)圖形界面應(yīng)用程序一直是Java語言的弱項(xiàng),但是隨著JDK的進(jìn)步,這一不足正在得到改善。作為開發(fā)人員,必須時刻了解語言和開發(fā)工具的最新動態(tài),持續(xù)提高自身的業(yè)務(wù)能力。

參考文獻(xiàn):

[1]馬朝暉,陳美紅.Java語言導(dǎo)學(xué)[M].北京:機(jī)械工業(yè)出版社.2003,1.

[2]陳昊鵬.Java編程思想.北京:機(jī)械工業(yè)出版社[M].2007,6.

主站蜘蛛池模板: 夜夜高潮夜夜爽国产伦精品| 美女免费黄网站| 日韩中文精品亚洲第三区| 无码区日韩专区免费系列| 99久久精品美女高潮喷水| 91欧美亚洲国产五月天| 免费无遮挡AV| 香蕉综合在线视频91| 国产日韩欧美中文| 亚洲免费毛片| 极品私人尤物在线精品首页| 欧美日韩中文国产| 中日韩一区二区三区中文免费视频| av在线人妻熟妇| 国产91精品调教在线播放| 国产精品乱偷免费视频| 国产福利免费视频| 国产区人妖精品人妖精品视频| 亚洲视频二| 日韩A级毛片一区二区三区| 亚洲精品在线影院| 国产亚洲视频免费播放| 国产视频自拍一区| 久久综合结合久久狠狠狠97色| 高潮爽到爆的喷水女主播视频 | 人人澡人人爽欧美一区| 国产成人亚洲精品色欲AV| 园内精品自拍视频在线播放| 一区二区三区四区精品视频| 99久久国产综合精品2020| 国产va在线观看免费| 亚洲欧州色色免费AV| 她的性爱视频| 亚洲中文字幕97久久精品少妇| 中文字幕不卡免费高清视频| 国产尹人香蕉综合在线电影| 99精品视频九九精品| 第一页亚洲| 国产精品嫩草影院视频| 久久人妻xunleige无码| 午夜性刺激在线观看免费| 天天综合网色中文字幕| 亚洲黄色成人| 国产福利在线观看精品| 欧美日韩中文国产va另类| 久久久久88色偷偷| 国内精品免费| 中文字幕日韩视频欧美一区| a级毛片一区二区免费视频| 久久久国产精品免费视频| 亚洲国产在一区二区三区| 久久久久亚洲Av片无码观看| 欧美日韩91| 午夜影院a级片| 日本免费福利视频| 在线另类稀缺国产呦| 精品视频在线一区| 国产欧美日韩va另类在线播放| 国产精品女熟高潮视频| 成人午夜网址| 欧美高清视频一区二区三区| 亚洲欧美极品| 亚洲欧美另类日本| 四虎永久在线精品影院| 呦女精品网站| 国产麻豆精品在线观看| 国产乱子伦视频三区| 人妻中文字幕无码久久一区| 亚洲天堂视频网站| 波多野结衣一区二区三区88| 欧美亚洲另类在线观看| 国产91视频免费| 国产精品白浆无码流出在线看| 国产欧美自拍视频| 亚瑟天堂久久一区二区影院| 亚洲日韩高清无码| 亚洲欧美自拍中文| 热伊人99re久久精品最新地| 影音先锋丝袜制服| 国产麻豆精品久久一二三| 免费高清毛片| 一本久道热中字伊人|