




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JavaSwing制作水晶效果一、序言關(guān)于Java做不好桌面”的爭(zhēng)論已經(jīng)由來(lái)已久。雖然Swing和Java2D已經(jīng)有超過(guò)十年的歷史,也有JIDE、JGoodies、TWaver等不少開源Swing組件,但是用Java做桌面程序仍然不 是一件輕松的事。本Java也驚艷系列文章,就是想通過(guò)一些簡(jiǎn)單生動(dòng)的例子,和大家 一起認(rèn)識(shí)Java、探索Swing。其實(shí)你只需要多一點(diǎn)創(chuàng)意、多一點(diǎn)耐心,你的Java程序也可以“驚艷”!本文就帶您一起進(jìn)入Java的“水晶之戀”。二、立體水晶效果受蘋果公司的影響,現(xiàn)在立體水晶風(fēng)格的界面非常流行。Java也可以嗎?我們不妨先嘗試一下用Java繪制一個(gè)立體水晶風(fēng)格的按鈕到底
2、有多難。一個(gè)立體的水晶按鈕應(yīng)當(dāng)有一個(gè)圖 標(biāo)、一個(gè)圓角矩形區(qū)域、邊框以及一些立體反光效果,如下圖:簡(jiǎn)單思路如下:先畫矩形區(qū)域,然后畫圖標(biāo),然后設(shè)置clip并畫高亮反光區(qū)域,最后畫外部邊框。具體實(shí)現(xiàn)比較簡(jiǎn)單,主要代碼如下:Color color = TWaverUtil.getRa ndomColor();RoundRectangle2D body = new RoundRectangle2D.FIoat(x,y, size, size, size / 3, size/ 3);/draw bodyg2d.setColor(color);Gradie ntPai nt paint = new Gra
3、die ntPai nt(x,y,color.darker(),x,y + size,color.brighter().brighter();g2d.setPa in t(pa in t);g2d.fill(body);/draw imageg2d.setClip(body);Image image = TWaverUtil.getlmage(/glass/ + i + .p ng); g2d.drawlmage(image,x + (size - image.getWidth(null) / 2,y + (size - image.getHeight (nu II) / 2,n ull);g
4、2d.setClip( null);/draw highlight.Shape highlightArea = createHighlightShape(x, y, size, body);g2d.setColor( new Color(255, 255, 255, 150);g2d.fill(highlightArea);/draw outl ine.g2d.setColor(color.darkGray);g2d.draw(body);其中,對(duì)高亮區(qū)域的計(jì)算,可以用一個(gè)圓心在左上方的大圓形和矩形進(jìn)行剪切:private staticShape createHighlightShape(in
5、tcenterX, int centerY, int size, Shapebody) double myRadius = size * 4;double x = cen terX - size * 2.3;double y = cen terY - size * 3.2;Ellipse2D.Double circle = new Ellipse2D.Double(x, y, myRadius, myRadius);Area area = new Area(circle);area.i ntersect( new Area(body);return area;運(yùn)行程序效果如下:三、更多變化 根
6、據(jù)上面例子稍作形狀變換,可以畫出立體水晶球的按鈕。Color color = TWaverUtil.getRandomColor();Ellipse2D.Double circle = new Ellipse2D.Double(centerX - radius, centerY - radius, radius * 2, radius* 2);/draw bodyg2d.setColor(color);GradientPaint paint = new GradientPaint(centerX, centerY,color, centerX, centerY+ radius * 2, col
7、or.brighter().brighter();g2d.setPaint(paint); g2d.fill(circle);/draw image g2d.setClip(circle);Image image = TWaverUtil.getImage(/glass/ + i + .png); g2d.drawImage(image,centerX - image.getWidth(null) / 2,centerY - image.getHeight(null) / 2,null);g2d.setClip(null);/draw highlight.Shape highlightArea
8、 = createHighlightShape(centerX, centerY, radius); g2d.setColor(new Color(255,255, 255, 150);g2d.fill(highlightArea);唯一略有不同的部分是,水晶球的高亮區(qū)域要用兩個(gè)圓形拼切:private static Shape createHighlightShape(int centerX, int centerY, int radius) double myRadius =radius * 0.8;double x = centerX - myRadius;double y1 = cen
9、terY - myRadius - myRadius / 5;double y2 = centerY - myRadius - myRadius / 5 * 2;Ellipse2D.Double circle1 = new Ellipse2D.Double(x, y1, myRadius * 2, myRadius * 2);Ellipse2D.Double circle2 = new Ellipse2D.Double(x, y2, myRadius * 2, myRadius * 2);Area area = new Area(circle1); ersect(new Are
10、a(circle2);return area;運(yùn)行效果如下:四、融入Swing組件以上例子僅使用了Java2D進(jìn)行繪圖。在實(shí)際使用中,需要將這些效果應(yīng)用的Swing組件中,例如按鈕等。一個(gè)簡(jiǎn)單的方式是:將以上圖形效果在內(nèi)存中生成內(nèi)存圖片并封裝到一個(gè)Imagelcon中,然后將Imagelcon圖標(biāo)作為JButton的圖標(biāo)進(jìn)行顯示。public static Image createlmagelc on (Image pha ntom, int size) Bufferedlmage bi = new Bufferedlmage(size, size, Bufferedlmage.TYPE_IN
11、T_ARGB);Graphics2D g2d = bi.createGraphics();g2d.setRe nderi ngHi nt(Re nderi ngHi nts.KEY_ANTIALIASING,Ren deri ngHi nts.VALUE_ANTIALIAS_ON);int cen ter = size / 2;int radius = cen ter;/此處進(jìn)行畫圖g2d.dispose(); return bi;然后,用這些Icon創(chuàng)建一些按鈕并顯示:public static void main(String args) throws Exception JFrame f
12、rame = new JFrame();frame.getC onten tPa ne().setLayout (new FlowLayout();frame.getCo nten tPa ne().add( new JButto n(”按鈕1, newframe.setDefaultCloseOperati on (JFrame.EXIT_ON_CLOSE);TWaverUtil.ce nterWi ndow(frame); frame.setVisible(true);本例子沒有使用Look And Feel。你也可以使用JGoodies來(lái)美化一下,效果肯定更好。五、總結(jié)可以看出,畫出這類立體水晶效果并不難,只需仔細(xì)觀察這些效果的光學(xué)細(xì)節(jié),并用Java2D的API來(lái)實(shí)現(xiàn)即可。這些例子稍作改進(jìn),就可以用來(lái)繪制JButton等Swing組件,并用在實(shí)際項(xiàng)目中。或者,也可以應(yīng)用這些技巧來(lái)做一些復(fù)雜圖形界面,如在TWaver中做出的網(wǎng)絡(luò)拓?fù)鋱D效果:.4Ff本文知
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南昌大學(xué)《小學(xué)科學(xué)活動(dòng)設(shè)計(jì)與指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 杭州科技職業(yè)技術(shù)學(xué)院《旅行社經(jīng)營(yíng)實(shí)務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 新疆政法學(xué)院《復(fù)合材料力學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱幼兒師范高等專科學(xué)?!赌茉磩?dòng)力(動(dòng)力工程)領(lǐng)域工程倫理》2023-2024學(xué)年第二學(xué)期期末試卷
- Starter Unit 1 Section B 1a-1e 教學(xué)設(shè)計(jì) 2024-2025學(xué)年人教版英語(yǔ)七年級(jí)上冊(cè)
- Unit 2 What time is it Part A Let's learn(教學(xué)設(shè)計(jì))-2023-2024學(xué)年人教PEP版英語(yǔ)四年級(jí)下冊(cè)
- 常州幼兒師范高等專科學(xué)?!夺t(yī)學(xué)遺傳學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- Unit 6 My week Lesson 2 Activities in a week(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教新起點(diǎn)版英語(yǔ)二年級(jí)下冊(cè)
- 滄州2025年河北滄州市人民醫(yī)院第一批招聘119人筆試歷年參考題庫(kù)附帶答案詳解
- ★試題:決策過(guò)程及其思維特點(diǎn)、科學(xué)決策與科學(xué)思維的關(guān)系
- 2025年不停電電源(UPS)項(xiàng)目合作計(jì)劃書
- 2025年國(guó)家林業(yè)和草原局直屬事業(yè)單位第一批招聘應(yīng)屆畢業(yè)生96人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年春季開學(xué)典禮校長(zhǎng)講話稿-少年無(wú)畏凌云志扶搖直上入云蒼
- 2025寒假開學(xué)第一課 課件【1】
- 山東省泰安市新泰市2024-2025學(xué)年(五四學(xué)制)九年級(jí)上學(xué)期1月期末道德與法治試題(含答案)
- 1《北京的春節(jié)》課后練習(xí)(含答案)
- (完整版)陸河客家請(qǐng)神書
- 2025年行業(yè)協(xié)會(huì)年度工作計(jì)劃
- DB3502T 160-2024 工業(yè)產(chǎn)品質(zhì)量技術(shù)幫扶和質(zhì)量安全監(jiān)管聯(lián)動(dòng)工作規(guī)范
- 2025年學(xué)校教師政治理論學(xué)習(xí)計(jì)劃
- 集團(tuán)專利管理制度內(nèi)容
評(píng)論
0/150
提交評(píng)論