swing 滾動文字

          Posted on 2009-02-12 14:46 閱讀(598) 評論(0)  編輯  收藏

           

          import   java.awt.*;  
            import   java.awt.event.*;  
            import   javax.swing.*; 
          import cilent.ScreenMessage;
           
            import   java.awt.font.*;  
            import   java.awt.geom.*;  
          import   java.awt.image.*;  
             
            public   class   ScrollText   extends   JComponent  
            {  
            private   BufferedImage   image;  
            private   Dimension   imageSize;  
            private   volatile   int   currOffset;  
             
            private   Thread   internalThread;  
            private   volatile   boolean   noStopRequested;  
            private String scrollText;
            public   ScrollText(String   text)  
            {  
            ScreenMessage m = new ScreenMessage();
            currOffset=0;  
            buildImage("今天天氣不錯!over");
            this.setMinimumSize(imageSize);  
            this.setPreferredSize(imageSize);  
            this.setMaximumSize(imageSize);  
            this.setSize(imageSize);  
             
            noStopRequested=true;  
            Runnable   r=new   Runnable()  
            {  
            public   void   run()  
            {  
            try  
            {  
            runWork();  
            }  
            catch(Exception   e)  
            {  
            e.printStackTrace();  
            }  
            }  
            };  
             
            internalThread=new   Thread(r,"ScrollText");  
            internalThread.start();  
            }  
             
            private   void   buildImage(String   text)  
            { 

            //請求繪制時,打開反鋸齒,并運用高質量選項  
            RenderingHints   renderHints=new   RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);  
            renderHints.put(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);  
             
            //創建一幅臨時圖像,用于判斷文件的大小  
            BufferedImage   scratchImage=new   BufferedImage(1,1,BufferedImage.TYPE_INT_RGB);  
             
            Graphics2D   scratchG2=scratchImage.createGraphics();  
            scratchG2.setRenderingHints(renderHints);  
             
            Font   font=new   Font("宋體",Font.BOLD|Font.ITALIC,24);//Serif 
             
            FontRenderContext   frc=scratchG2.getFontRenderContext();  
            TextLayout   t1=new   TextLayout(text,font,frc);  
            Rectangle2D   textBounds=t1.getBounds();   
            int   textWidth=(int)Math.ceil(textBounds.getWidth()); //設置滾動區的大小是字符串的大小
            //int   textWidth=ScreenMessage.width; //設置滾動區的大小
            int   textHeight=(int)Math.ceil(textBounds.getHeight());  
           // int textHeight = ScreenMessage.height/10;
            int   horizontalPad=0;  
            int   verticalPad=6;  
             
            imageSize=new   Dimension(textWidth+horizontalPad,textHeight+verticalPad);  
             
            //創建適當大小的圖像  
            image=new   BufferedImage(imageSize.width,imageSize.height,BufferedImage.TYPE_INT_RGB);  
             
            Graphics2D   g2=image.createGraphics();  
            g2.setRenderingHints(renderHints);  
             
            int   baselineOffset=(verticalPad/2)-((int)textBounds.getY());  
             
            g2.setColor(Color.white);  
            g2.fillRect(0,0,imageSize.width,imageSize.height);  
             
            g2.setColor(Color.black);  
            t1.draw(g2,0,baselineOffset);  
            //立即釋放資源,但保持動畫顯示圖像  
            scratchG2.dispose();  
            scratchImage.flush();  
            g2.dispose();  
            }  
             
            public   void   paint(Graphics   g)  
            {  
            //不論當前大小,確保裁減邊緣  
            g.setClip(0,0,imageSize.width,imageSize.height);  
             
            int   localOffset=currOffset; //以防改變  
            g.drawImage(image,-localOffset,0,this); 
            g.drawImage(image,imageSize.width-localOffset,0,this);
            /*//繪制輪廓  
            g.setColor(Color.black);  
            g.drawRect(0,0,imageSize.width-1,imageSize.height-1); */
            }  
             
            private   void   runWork()  
            {  
            while(noStopRequested)  
            {  
            try  
            {  
            Thread.sleep(50); //每秒10幀  
             
            //調整滾動位置  
            currOffset=(currOffset+1)%imageSize.width;  
             
            //通知事件線程調用paint()  
            repaint();  
            }  
            catch(InterruptedException   e)  
            {  
            Thread.currentThread().interrupt();  
            }  
            }  
            }  
             
            public   void   stopRequest()  
            {  
            noStopRequested=false;  
            internalThread.interrupt();  
            }  
             
            public   boolean   isAlive()  
            {  
            return   internalThread.isAlive();  
            }  
             
            public   static   void   main(String   args[])  
                    {  
                    ScrollText   st=new   ScrollText("Java   can   do   animation!");  
                    JPanel   p=new   JPanel();  
                    p.setLayout(new FlowLayout());
                    p.add(st);  
                     
                    JFrame   f=new   JFrame("ScrollText   Demo");  
                    f.setContentPane(p);  
                    }

          public String getScrollText() {
           return scrollText;
          }

          public void setScrollText(String scrollText) {
           this.scrollText = scrollText;
          }  
                }


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 40, comments - 9, trackbacks - 0, articles - 9

          Copyright © 希

          主站蜘蛛池模板: 彰化市| 碌曲县| 收藏| 清流县| 隆安县| 井陉县| 惠安县| 新干县| 中宁县| 蓝田县| 大连市| 嵊泗县| 闽侯县| 临武县| 柳州市| 偃师市| 金门县| 津南区| 鄯善县| 云安县| 分宜县| 交城县| 那曲县| 余姚市| 洛南县| 嘉鱼县| 瑞安市| 西充县| 响水县| 楚雄市| 大同县| 武宁县| 富蕴县| 蕉岭县| 行唐县| 鄂伦春自治旗| 永州市| 定安县| 临武县| 绵竹市| 昭平县|