菜刀不行..更換大刀!(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的網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洛阳市| 佛山市| 定边县| 桐乡市| 沿河| 开远市| 镇江市| 湘潭县| 碌曲县| 绥芬河市| 左贡县| 遵义县| 澄江县| 墨竹工卡县| 吴川市| 招远市| 广丰县| 兴业县| 甘孜县| 开封市| 手游| 大埔区| 偃师市| 南投市| 博白县| 霍邱县| 安康市| 永新县| 晴隆县| 乌兰浩特市| 贡觉县| 文安县| 宁津县| 马尔康县| 大名县| 怀宁县| 宝丰县| 宁陵县| 定安县| 山东| 武乡县|