• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            逛奔的蝸牛

            我不聰明,但我會很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::

            【摘要】

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

             

            【準備篇】

            Q:何為 NinePatch技術?

            A:說簡單點,就是用于對圖片據屏幕大小進行自動拉伸的技術。更準確的介紹詳見此文:http://www.yixieshi.com/ucd/9142.html

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

             

            Q:NinePatch對Swing意味著什么?

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

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

            很多不可能將成為現實。Android程序的外觀定制其實有點Java標準平臺換膚技術Synth的影子,但顯然,這個聰名的小改進,使得 外觀定制比Swing更容易、更靈活。

             

            Q:從何處獲得NinePatch技術呢?

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

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

            后可以在附件里下載哦。

             

            【準備好.9.png圖片】

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

                  

             

            【測試代碼】

            復制代碼
            package jb2011.t;
            import java.awt.BorderLayout;
            import java.awt.Graphics;
            import java.awt.Graphics2D;
            import java.awt.Rectangle;
            import java.io.InputStream;
            import javax.swing.BorderFactory;
            import javax.swing.JButton;
            import javax.swing.JFrame;
            import javax.swing.JPanel;
            import javax.swing.SwingUtilities;
            import com.android.ninepatch.NinePatch;
            /**
            * 本類用于測試從Android中引入的NinePatch(九格圖)技術的可行性.
            *
            * @author jb2011@163.com
            * @version 1.0
            */
            class Test extends JPanel
            {
            //NinePatch作為全局對象,提高性能
            private NinePatch mPatch;
            public Test()
            {
            super (new BorderLayout());
            //*** 關鍵代碼:讀取9格圖 START
            try{
            InputStream stream = this .getClass().getResourceAsStream(
            //                    "content_bg2.9.png"
            "content_bg3.9.png"
            );
            mPatch = NinePatch.load(stream, true /* is9Patch*/, false /* convert */);
            }
            catch (Exception e){
            e.printStackTrace();
            }
            //*** 關鍵代碼:讀取9格圖 END
            //加入一個面板,用于演示
            JPanel p = new JPanel();
            p.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
            //該面板設置成背景透明
            p.setOpaque(false);
            this.add(p);
            //加入演示組件
            p.add(new JButton("JButton 1"));
            p.add(new JButton("JButton 2"));
            p.add(new JButton("JButton 3"));
            p.add(new JButton("JButton 4"));
            }
            /**
            * 重寫父類方法,以便實現自定義背景的繪制.
            */
            @Override protected void paintComponent(Graphics g)
            {
            Graphics2D g2 = (Graphics2D) g;
            Rectangle clip = g2.getClipBounds(); // 有點小問題,要用(0, 0, getWidth(), getHeight()),否則每次繪制的clip都不一樣而導致異常現象.
            //*** 關鍵代碼:使用9格圖 START
            //使用9格圖繪制面板的背景
                    mPatch.draw(g2, clip.x, clip.y, clip.width, clip.height);
            //*** 關鍵代碼:使用9格圖 END
                }
            public static void main(final String[] args)
            {
            SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            JFrame frame = new JFrame();
            frame.setContentPane(new JPanel(new BorderLayout()));
            ((JPanel)frame.getContentPane()).setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
            frame.getContentPane().add(new Test(), BorderLayout.CENTER);
            frame.setSize(300,250);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
            }
            });
            }
            }
            復制代碼

             

             【運行效果圖】

             【附件下載】

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

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

             

            ================================================================================

            【最后再啰嗦幾句】

              潛水了很多年,得益于許多無私網友的奉獻,越發覺得很有必要與人分享一些東西。接下來將陸續寫出“Swing整容”系列文章,

            希望對需要的人有用,但因水平確實有限,不喜者還請勿噴,多謝。

              有人說,Swing很丑,這話沒錯,但Swing真的沒救了?答案當然是否定的。接下來的文章將會與Swing的L&F有關,謝謝關注。

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

            http://joshuaxiao.iteye.com/blog/707514。“WilliamChen”的Swing技術文章也是相當不錯,可惜多年不更新了,有興趣的朋

            友可以去圍觀哦,http://blog.sina.com.cn/swingjava


            From: http://www.cnblogs.com/jb2011/archive/2012/05/02/2479002.html

            @import url(http://m.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
            posted on 2013-06-05 08:07 逛奔的蝸牛 閱讀(2070) 評論(1)  編輯 收藏 引用 所屬分類: Java

            評論

            # re: Java: Swing中引入Android的NinePatch技術,讓Swing擁有Android的外觀定制能力 2014-07-19 11:53 Friv 5
            這篇文章寫得很好,同時也包含了很多有用的事實。  回復  更多評論
              

            久久亚洲精精品中文字幕| 久久人做人爽一区二区三区| 狠狠精品久久久无码中文字幕| 2021国内久久精品| 久久婷婷五月综合色99啪ak| 中文字幕久久精品| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久国产乱子伦免费精品| 一级做a爰片久久毛片人呢| 国产精品岛国久久久久| 香蕉久久一区二区不卡无毒影院 | 久久99久久99精品免视看动漫| 久久人人添人人爽添人人片牛牛| 久久777国产线看观看精品| 香蕉99久久国产综合精品宅男自| AV无码久久久久不卡蜜桃| 久久精品国产亚洲5555| 亚洲精品无码成人片久久| 久久久久国色AV免费看图片| 久久久婷婷五月亚洲97号色| 99久久免费只有精品国产| 久久水蜜桃亚洲av无码精品麻豆| 久久不见久久见免费影院www日本| 一本色综合网久久| 久久久久久久久66精品片| 丁香久久婷婷国产午夜视频| 精品熟女少妇a∨免费久久| 久久久久久曰本AV免费免费| 欧美久久亚洲精品| 亚洲国产精品热久久| 久久久久久九九99精品| 亚洲中文字幕无码久久精品1 | 久久夜色撩人精品国产| 久久最近最新中文字幕大全 | 99久久国产综合精品五月天喷水| 久久永久免费人妻精品下载| 狠狠色狠狠色综合久久| 性欧美丰满熟妇XXXX性久久久| 久久人人爽人人爽人人av东京热 | 日日狠狠久久偷偷色综合免费| 丰满少妇人妻久久久久久4|