<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 117  文章 - 72  trackbacks - 0

    聲明:原創(chuàng)作品(標(biāo)有[原]字樣)轉(zhuǎn)載時(shí)請(qǐng)注明出處,謝謝。

    常用鏈接

    常用設(shè)置
    常用軟件
    常用命令
     

    訂閱

    訂閱

    留言簿(7)

    隨筆分類(130)

    隨筆檔案(123)

    搜索

    •  

    積分與排名

    • 積分 - 156577
    • 排名 - 390

    最新評(píng)論

    [關(guān)鍵字]:java,design pattern,設(shè)計(jì)模式,《Java與模式》學(xué)習(xí),Proxy Pattern,代理模式
    [環(huán)境]:StarUML5.0 + JDK6
    [作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
    [正文]:

    虛擬代理:

    package pattern.proxy.virtual;

    import java.awt.Graphics;
    import java.awt.Component;
    import java.awt.Insets;
    import java.awt.Container;
    import javax.swing.JPanel;
    import javax.swing.JOptionPane;
    import javax.swing.ImageIcon;
    import javax.swing.SwingUtilities;
    import javax.swing.JFrame;
    import javax.swing.Icon;
    /**
     * 虛擬代理
     *
     * 使用代理加載圖片
     *
     * @version 2009-6-29
     * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
     */
    public class VirtualProxyTest extends JFrame{
        private final int WIDTH = 500;
        private final int HEIGHT = 500;
        

        public VirtualProxyTest(){
            super("虛擬代理");
            
            setContentPane(new MyPanel());
            setSize(WIDTH , HEIGHT);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
        }

        public static void main(String[] args){
            VirtualProxyTest test = new VirtualProxyTest();
        }
    }

    class MyPanel extends JPanel{
        private IconProxy iconProxy;

        public MyPanel(){
            iconProxy = new IconProxy("sample.jpg" , 200 , 20);
        }

        @Override
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            
            iconProxy.paintIcon(this , g , 0 , 0);
        }
    }

    class IconProxy implements Icon{
        private Icon icon;
        private String fileName;//Icon的文件名
        private boolean done;//Icon是否加載完成
        private final int STR_X;
        private final int STR_Y;
        
        /**
         * @param fileName 圖片文件
         * @param str_x 字符串輸出的x位置
         * @param str_y 字符串輸出的y位置
         */
        public IconProxy(String fileName , int str_x , int str_y){
            icon = null;
            this.fileName = fileName;
            done = false;
            STR_X = str_x;
            STR_Y = str_y;
            
        }

        @Override
        public int getIconHeight(){
            return icon.getIconHeight();
        }

        @Override
        public int getIconWidth(){
            return icon.getIconWidth();
        }

        @Override
        public void paintIcon(final Component c, Graphics g, int x, int y){
            //因?yàn)镴Frame的標(biāo)題欄和邊框占據(jù)了空間,
            //而paintIcon是從容器的(0,0)坐標(biāo)開始繪制,所以要計(jì)算邊框所占的空間。
            Insets inset = new Insets(0,0,0,0);
            if(c instanceof Container)
                inset = ((Container)c).getInsets();

            if(!done){//未加載完成
                g.drawString("Loading icon...",
                                    inset.right + STR_X ,
                                    inset.top + STR_Y);
            
                synchronized(this){
                    SwingUtilities.invokeLater(
                        new Runnable(){
                            public void run(){
                                //延時(shí)
                                try{
                                    Thread.sleep(5*1000);
                                }catch(InterruptedException e){
                                    JOptionPane.showMessageDialog(c , e.getMessage());
                                }
                                
                                icon = new ImageIcon(fileName);
                                done = true;
                                c.repaint();
                            }
                        }
                    );
                }//end of synchronized
            }
            else{//加載完成
                
                g.drawString("Loaded successfully.",
                                    inset.right + STR_X ,
                                    inset.top + STR_Y);
                //空出長(zhǎng)度為STR_Y的空間給String
                icon.paintIcon(c , g , x + inset.right , y + inset.top + STR_Y + 5);
            }
        }
    }

    運(yùn)行結(jié)果:
    Loading icon...


    Loaded successfully:

    posted on 2009-06-29 22:41 天堂露珠 閱讀(1301) 評(píng)論(0)  編輯  收藏 所屬分類: Pattern
    主站蜘蛛池模板: 亚洲av永久无码| 亚洲五月综合缴情在线观看| 成人婷婷网色偷偷亚洲男人的天堂| 免费一级毛片清高播放| 国产成人精品一区二区三区免费| 亚洲三级中文字幕| 全免费毛片在线播放| 国产精品亚洲二区在线| 无码久久精品国产亚洲Av影片| a毛片基地免费全部视频| fc2成年免费共享视频18| 亚洲人成网站日本片| 国产人成免费视频网站| 麻豆一区二区三区蜜桃免费| 亚洲av无码一区二区乱子伦as| 成年女人午夜毛片免费看| 亚洲精华国产精华精华液好用| 亚洲人成网7777777国产| 欧美大尺寸SUV免费| 免费观看久久精彩视频| 久久精品国产亚洲av成人| 四虎在线免费播放| 羞羞的视频在线免费观看| 97亚洲熟妇自偷自拍另类图片| 久久青草91免费观看| 亚洲av无一区二区三区| 久久精品国产亚洲AV无码偷窥| 亚洲精品视频在线看| 亚洲天堂免费在线视频| 亚洲日韩久久综合中文字幕| 伊人久久大香线蕉亚洲| 永久免费在线观看视频| 精品国产成人亚洲午夜福利| 久久久亚洲精品国产| 国产成人精品日本亚洲专区| 免费国产叼嘿视频大全网站| 美女视频黄视大全视频免费的| 亚洲性线免费观看视频成熟| 久久久久亚洲av无码专区导航 | 国产免费AV片在线观看播放| 亚洲欧美日韩中文无线码|