菜刀不行..更換大刀!(JavaSwing 旋轉式關閉窗口);

          這個可是我的愛....無私的奉賢給你們這些看文章不回帖的家伙們!!!!!

          效果圖:




          源碼

           

          import java.awt.Dimension;
          import java.awt.Graphics;
          import java.awt.Graphics2D;
          import java.awt.Rectangle;
          import java.awt.Robot;
          import java.awt.Toolkit;
          import java.awt.geom.AffineTransform;
          import java.awt.image.BufferedImage;

          import javax.swing.JComponent;
          import javax.swing.JFrame;
          import javax.swing.JWindow;

          public class Dissolver extends JComponent implements Runnable {
           JFrame frame;
           JWindow fullscreen;
           
          int count;
           BufferedImage frame_buffer;
           BufferedImage screen_buffer;

           
          public Dissolver() { }

           
          public void run() {
            
          try {
             count 
          = 0;
             Thread.currentThread().sleep(
          100);
             
          for(int i=0; i<10; i++{
              count 
          = i;
              fullscreen.repaint();
              Thread.currentThread().sleep(
          100);
             }

            }
           catch (InterruptedException ex) {}
            System.exit(
          1);
           }

           
          public void dissolveExit(JFrame frame) {
            
          try {
             
          this.frame = frame;
             Robot robot 
          = new Robot();
             
             Rectangle frame_rect 
          = frame.getBounds();
             frame_buffer 
          = robot.createScreenCapture(frame_rect);

             frame.setVisible(
          false);

             Dimension screensize 
          = Toolkit.getDefaultToolkit()
                   .getScreenSize(); 
             Rectangle screen_rect 
          = new Rectangle(0,0
              screensize.width, screensize.height); 
             screen_buffer 
          = robot.createScreenCapture(screen_rect);

             fullscreen 
          = new JWindow(new JFrame());
             fullscreen.setSize(screensize);
             fullscreen.add(
          this);
             
          this.setSize(screensize);
             fullscreen.setVisible(
          true);

             fullscreen.repaint();
             
             
          new Thread(this).start();
             }
           catch (Exception ex) {
              System.out.println(ex);
              ex.printStackTrace();
             }

            }


          }

          class SpinDissolver extends Dissolver {

           
          public void paint(Graphics g) {
            Graphics2D g2 
          = (Graphics2D)g;

            g.drawImage(screen_buffer,
          -fullscreen.getX(),
             fullscreen.getY(),
          null);
            
            AffineTransform old_trans 
          = g2.getTransform();

            
          // 移動到框架的上面-左手邊角落
            g2.translate(frame.getX(), frame.getY());

            
          // 向左邊將框架移出
            g2.translate(0,
                 
          +(count+1* (frame.getX()+frame.getWidth())/20);

            
          // 收縮 frame
            float scale = 1f / ((float)count+1);
            g2.scale(scale,scale);

            
          // 中心的周圍
            g2.rotate(((float)count)/3.14/1.3,
             frame.getWidth()
          /2, frame.getHeight()/2);
            g2.drawImage(frame_buffer,
          0,0,null);
            g2.setTransform(old_trans); 
           }
           
          }


           

           下來沒用一個類來實現他...

          import java.awt.BorderLayout;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;
          import java.awt.event.WindowEvent;
          import java.awt.event.WindowListener;

          import javax.swing.JButton;
          import javax.swing.JFrame;


          public class DissolveHack {
              
                  
          public static void main(String[] args) {

                      
          final JFrame frame = new JFrame("Dissolve Hack");
                      frame.setLayout(
          new BorderLayout());
                      
          final JButton quit = new JButton("Quit");
                      quit.addActionListener(
          new ActionListener( ) {
                          
          public void actionPerformed(ActionEvent evt) {
                              quit.setVisible(
          false);
                          
                          }

                      }
          );

                      frame.getContentPane().add(quit,BorderLayout.NORTH);
                      frame.getContentPane().add(
          new JButton("我轉~"),BorderLayout.CENTER);
                      frame.getContentPane().add(
          new JButton("我轉~"),BorderLayout.SOUTH);
                      frame.getContentPane().add(
          new JButton("我轉~"),BorderLayout.EAST);
                      frame.getContentPane().add(
          new JButton("我轉~"),BorderLayout.WEST);
                      frame.addWindowListener(
          new WindowListener(){

                          
          public void windowActivated(WindowEvent arg0) {
                          }

                          
          public void windowClosed(WindowEvent arg0) {                
                          }

                          
          public void windowClosing(WindowEvent arg0) {
                              
          new SpinDissolver().dissolveExit(frame);
                          }

                          
          public void windowDeactivated(WindowEvent arg0) {
                          }

                          
          public void windowDeiconified(WindowEvent arg0) {
                          }

                          
          public void windowIconified(WindowEvent arg0) {
                          }

                          
          public void windowOpened(WindowEvent arg0) {
                          }

                      }
          );
                      frame.pack( );
                      frame.setLocation(
          300,300);
                      frame.setSize(
          400,400);
                      frame.setVisible(
          true);
                  }
           
              }


          posted on 2008-05-23 15:37 相信 閱讀(1000) 評論(1)  編輯  收藏 所屬分類: Swing文章

          評論

          # re: 菜刀不行..更換大刀!(JavaSwing 旋轉式關閉窗口);[未登錄] 2009-08-22 08:18 一粒沙

          一點都不明白在說什么。  回復  更多評論   

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          不顯示applet

          常用鏈接

          留言簿(16)

          我參與的團隊

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          swingchina 專業搞Swing的網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 中山市| 崇文区| 锡林郭勒盟| 孙吴县| 舟山市| 抚顺市| 莆田市| 伊金霍洛旗| 阳原县| 北碚区| 依兰县| 宁安市| 新密市| 漳州市| 河南省| 呼玛县| 本溪市| 手游| 谢通门县| 买车| 天水市| 湘西| 石河子市| 沈阳市| 榆中县| 双流县| 临江市| 玉门市| 盐边县| 南安市| 凭祥市| 尚志市| 仙桃市| 延寿县| 奉新县| 九龙坡区| 石嘴山市| 长垣县| 梅州市| 内江市| 驻马店市|