自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Swing雜記:引入Android的NinePatch技術(shù)

開發(fā) 后端
本文詣在展示如何在Swing中引入Android的NinePatch技術(shù)(Android早期有文章里中文譯作九格圖,暫且這么叫吧^_^,但此術(shù)非傳統(tǒng)移動手機(jī)上的功能布局——九格圖哦)。

【摘 要】

本文詣在展示如何在Swing中引入Android的NinePatch技術(shù)(Android早期有文章里中文譯作九格圖,暫且這么叫吧^_^,但此術(shù)非傳統(tǒng)移動手機(jī)上的功能布局——九格圖哦)。

 

【準(zhǔn)備篇】

Q:何為Android的NinePatch技術(shù)?

A:說簡單點,就是Android平臺中用于對圖片據(jù)屏幕大小進(jìn)行自動拉伸的技術(shù)。更準(zhǔn)確的介紹詳見此文:http://www.yixieshi.com/ucd/9142.html。

NinePatch技術(shù)本身雖微不足道,但它對于Android的UI定制開發(fā)來說無疑是相當(dāng)有價值的。也可直接看官方指南:http://developer.android.com/guide/developing/tools/draw9patch.html。

 

Q:NinePatch對Swing意味著什么?

A:利用NinePatch技術(shù),比如:你在美化Swing的按鈕UI時,再也不用根據(jù)不同的按鈕大小準(zhǔn)備不同的圖片了,一張圖片解決不同按鈕按各自大小自動拉伸填充的問題,多么神奇!

當(dāng)然,如果你對Android的程序比較熟,或者說對android的程序外觀定制比較熟的話,你將會更清楚這一點——Swing的外觀定制能力將會因此變的無比靈活和強(qiáng)大,

很多不可能將成為現(xiàn)實。Android程序的外觀定制其實有點Java標(biāo)準(zhǔn)平臺換膚技術(shù)Synth的影子,但顯然,這個聰名的小改進(jìn),使得Android的外觀定制比Swing更容易、更靈活。

 

Q:Android平臺的NinePatch技術(shù)可以直接拿到Java標(biāo)準(zhǔn)平臺上使用?

A:沒錯,兩個java平臺除去UI部份外,本身有很大一部分是可以互相兼容的,具體情況請了解android平臺java技術(shù)的前世今生。

 

Q:從何處獲得Android平臺的NinePatch技術(shù)呢?

A:NinePatch技術(shù)的核心只有3到4個類,拿過來用就可以了,源碼地址可以在此鏈接找到:

http://www.java2s.com/Open-Source/Android/android-core/platform-sdk/com.android.ninepatch.htm,我打好的包稍

后可以在附件里下載哦。

 

【準(zhǔn)備好.9.png圖片】

本圖片將使用NinePatch技術(shù)作為演示代碼中的一JPanel背景進(jìn)行自動填充之用,用不同的2張圖是為了方便進(jìn)行效果展示:

 

【測試代碼】

  1. package jb2011.t;  
  2. import java.awt.BorderLayout;  
  3. import java.awt.Graphics;  
  4. import java.awt.Graphics2D;  
  5. import java.awt.Rectangle;  
  6. import java.io.InputStream;  
  7.  
  8. import javax.swing.BorderFactory;  
  9. import javax.swing.JButton;  
  10. import javax.swing.JFrame;  
  11. import javax.swing.JPanel;  
  12. import javax.swing.SwingUtilities;  
  13.  
  14. import com.android.ninepatch.NinePatch;  
  15.  
  16. /**  
  17.  * 本類用于測試從Android中引入的NinePatch(九格圖)技術(shù)的可行性.  
  18.  *   
  19.  * @author jb2011@163.com  
  20.  * @version 1.0  
  21.  */ 
  22. class Test extends JPanel  
  23. {  
  24.     //NinePatch作為全局對象,提高性能  
  25.     private NinePatch mPatch;  
  26.       
  27.     public Test()  
  28.     {  
  29.         super (new BorderLayout());  
  30.  
  31.         //*** 關(guān)鍵代碼:讀取9格圖 START  
  32.         try{  
  33.             InputStream stream = this .getClass().getResourceAsStream(  
  34. //                    "content_bg2.9.png"  
  35.                     "content_bg3.9.png" 
  36.                     );  
  37.             mPatch = NinePatch.load(stream, true /* is9Patch*/, false /* convert */);  
  38.         }  
  39.         catch (Exception e){  
  40.             e.printStackTrace();  
  41.         }  
  42.         //*** 關(guān)鍵代碼:讀取9格圖 END  
  43.           
  44.         //加入一個面板,用于演示  
  45.         JPanel p = new JPanel();  
  46.         p.setBorder(BorderFactory.createEmptyBorder(20202020));  
  47.         //該面板設(shè)置成背景透明  
  48.         p.setOpaque(false);  
  49.         this.add(p);  
  50.           
  51.         //加入演示組件  
  52.         p.add(new JButton("JButton 1"));  
  53.         p.add(new JButton("JButton 2"));  
  54.         p.add(new JButton("JButton 3"));  
  55.         p.add(new JButton("JButton 4"));  
  56.     }  
  57.  
  58.     /**  
  59.      * 重寫父類方法,以便實現(xiàn)自定義背景的繪制.  
  60.      */  
  61.     @Override protected void paintComponent(Graphics g)   
  62.     {  
  63.         Graphics2D g2 = (Graphics2D) g;  
  64.         Rectangle clip = g2.getClipBounds();  
  65.           
  66.         //*** 關(guān)鍵代碼:使用9格圖 START  
  67.         //使用9格圖繪制面板的背景  
  68.         mPatch.draw(g2, clip.x, clip.y, clip.width, clip.height);  
  69.         //*** 關(guān)鍵代碼:使用9格圖 END  
  70.     }  
  71.       
  72.     public static void main(final String[] args)  
  73.     {  
  74.         SwingUtilities.invokeLater(new Runnable() {  
  75.             public void run() {  
  76.                 JFrame frame = new JFrame();  
  77.                 frame.setContentPane(new JPanel(new BorderLayout()));  
  78.                 ((JPanel)frame.getContentPane()).setBorder(BorderFactory.createEmptyBorder(5,5,5,5));  
  79.                 frame.getContentPane().add(new Test(), BorderLayout.CENTER);  
  80.                 frame.setSize(300,250);  
  81.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  82.                 frame.setLocationRelativeTo(null);  
  83.                 frame.setVisible(true);  
  84.             }  
  85.         });  
  86.     }  

【運行效果圖】

 

【附件下載】

測試代碼完整Eclipse3.5.2工程(含NinePatch的jar包哦):

http://files.cnblogs.com/jb2011/jb2011blog_testNinePatch.rar

【最后再啰嗦幾句】

潛水了很多年,得益于許多無私網(wǎng)友的奉獻(xiàn),越發(fā)覺得很有必要與人分享一些東西。接下來將陸續(xù)寫出“Swing整容”系列文章,希望對需要的人有用,但因水平確實有限,不喜者還請勿噴,多謝。

有人說,Swing很丑,這話沒錯,但Swing真的沒救了?答案當(dāng)然是否定的。以下2張圖是近期為一款產(chǎn)品設(shè)計開發(fā)的全新外觀,接下來的文章將會與它們有關(guān),謝謝關(guān)注。


(圖1,沒錯,這是Swing的界面哦,半透明立體陰影邊框這張圖上看不出明顯效果)


圖2,這也是Swing的界面哦

“民工甲”的“Swing三刀”系列文章給了我最近一次Swing美化工作的部分靈感,非常感謝作者的無私,文章地址是:http://joshuaxiao.iteye.com/blog/707514。

“WilliamChen”的Swing技術(shù)文章也是相當(dāng)不錯,可惜多年不更新了,有興趣的朋友可以去圍觀哦,http://blog.sina.com.cn/swingjava。

原文鏈接:http://www.cnblogs.com/jb2011/archive/2012/05/02/2479002.html

【編輯推薦】

  1. Swing中使用方向鍵移動圖片  
  2. Java圖形界面開發(fā):高級Swing容器(三)  
  3. Java圖形界面開發(fā):高級Swing容器(二)  
  4. Java圖形界面開發(fā):高級Swing容器(一)  
  5. Java圖形用戶界面:高級組件綜合例子  
責(zé)任編輯:林師授 來源: jb2011的博客
相關(guān)推薦

2009-07-10 14:41:57

Swing技術(shù)

2009-07-09 11:55:17

Swing模型過濾

2009-07-14 14:00:47

iData技術(shù)

2009-07-15 15:35:59

Swing程序Swing性能

2017-02-08 13:33:34

AndroidJavaPhp

2009-07-09 13:44:22

Swing動態(tài)界面設(shè)計

2020-12-28 19:30:27

可穿戴技術(shù)工業(yè)4.0物聯(lián)網(wǎng)

2021-05-13 19:16:43

物聯(lián)網(wǎng)建筑技術(shù)IOT

2009-07-14 17:21:42

Swing組件

2009-07-15 11:02:32

Swing組件

2009-07-14 15:01:02

AWT和Swing

2009-07-16 08:53:03

Swing任務(wù)Swing線程

2009-07-10 11:25:48

Swing應(yīng)用數(shù)據(jù)驗證

2009-07-10 16:29:32

Swing組件

2009-07-17 17:16:44

Swing實現(xiàn)的目標(biāo)

2009-07-17 11:30:44

Swing Image

2009-07-16 16:46:39

Swing窗體

2009-09-18 14:40:45

HTML 5技術(shù)

2009-07-04 15:59:56

傳輸網(wǎng)絡(luò)ASON

2009-07-17 10:11:55

AWT和Swing
點贊
收藏

51CTO技術(shù)棧公眾號