在戰(zhàn)牛刀(不停震動(dòng)的Dialog)

          效果圖沒(méi)滴..因?yàn)樗煌U饎?dòng)=.= 我截下來(lái)只是個(gè)靜態(tài)圖片
          所以就不發(fā)了...
          運(yùn)行效果自己看

           

          package DZDialog;

          import java.awt.Point;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;

          import javax.swing.JDialog;
          import javax.swing.JOptionPane;
          import javax.swing.Timer;

          public class DialogEarthquakeCenter extends Object implements Runnable{

            
          // 在這里我把常量說(shuō)一下..下面計(jì)算時(shí)你們自己看..我就不一個(gè)一個(gè)說(shuō)了
                   
          //Shake Distance 是搖動(dòng)距離的意思
                   
          //Shake Cycle 是搖動(dòng)周期的意思
                   
          //Shake Duration  搖動(dòng)期間
                   
          //***** Upadate 這個(gè)看不懂的話 下面的你就別看了
                      public static final int SHAKE_DISTANCE = 10;
                      
          public static final double SHAKE_CYCLE = 50;
                      
          public static final int SHAKE_DURATION = 1000;
                      
          public static final int SHAKE_UPDATE = 2;

                      
          private JDialog dialog;
                      
          private Point naturalLocation;
                      
          private long startTime;
                      
          private Timer shakeTimer;
                      
                      
          private final double TWO_PI = Math.PI * 2.0;

                      
          public DialogEarthquakeCenter (JDialog d) {
                          dialog 
          = d;
                      }


                      
          public void startShake( ) {
                          naturalLocation 
          = dialog.getLocation( );
                          startTime 
          = System.currentTimeMillis( );
                          shakeTimer 
          =
                             
          new Timer(SHAKE_UPDATE,
                                       
          new ActionListener( ) {

                                        
          public void actionPerformed (ActionEvent e) {    
                                         
          //將當(dāng)前系統(tǒng)的系統(tǒng)時(shí)間 以毫秒的形式付給elapsed
                                            long elapsed = System.currentTimeMillis();
                                            
                                            
          double waveOffset = (elapsed % SHAKE_CYCLE) /
                                                SHAKE_CYCLE; 
                                            
          double angle = waveOffset * TWO_PI;

                                            
          int shakenX = (int) ((Math.sin (angle) *
                                                                  SHAKE_DISTANCE) 
          +
                                                                 naturalLocation.x); 
                                            dialog.setLocation (shakenX, naturalLocation.y);               
                                            dialog.repaint( );

                                            
          if (elapsed >= SHAKE_DURATION)                                                  stopShake( );
                                        }

                                   }

                                   );
                      shakeTimer.start( );
                      
                      
          //如果不開(kāi)下面這個(gè)線程的話 窗口只震動(dòng)一次
                      
          //如果有這個(gè)線程 就是Thread.sleep(100)運(yùn)行一次Timer
                      
          //每運(yùn)行Timer一次 窗口就會(huì)震動(dòng)一次 我讓線程while(true)就是死循環(huán) 讓他不停的震動(dòng)
                      Thread t = new Thread(this);
                      t.start();
                  }


                  
          public void stopShake( ) {
                      shakeTimer.stop( );
                      dialog.setLocation (naturalLocation);
                      dialog.repaint( );
                  }


                  
                  
          public static void main (String[] args) {
                      JOptionPane pane 
          =
                          
          new JOptionPane ("這幾天.心情很郁悶..汶川的事.讓我沉靜了很久..這到底是誰(shuí)的錯(cuò)?" +'\n'+
                                     
          "難道老天沒(méi)有感情嗎??.震吧..震吧." +'\n'+
                                     
          "連我的Swing程序也一起震了吧",
                                           JOptionPane.ERROR_MESSAGE, JOptionPane.OK_OPTION);
                      
                      JDialog d 
          = pane.createDialog (null"痛心的汶川");
                      
                      DialogEarthquakeCenter dec 
          = new 

                      DialogEarthquakeCenter (d);
                      d.pack( );
                      d.setModal (
          false);
                      d.setVisible(
          true);
                      dec.startShake( );

                      
          // wait (forever) for a non-null click and then quit
                      while (pane.getValue( ) == JOptionPane.UNINITIALIZED_VALUE ) 
                         
          try { Thread.sleep(100); } 
                         
          catch (InterruptedException ie) {}
                
                }
           
                         System.exit(
          0); 
                      }


            
          public void run() {
             
          while(true){
              
          try{
              Thread.sleep(
          100);
              }
          catch(Exception e){
              }

              shakeTimer.start();
             }

            }
           

          }



           

          posted on 2008-05-20 13:10 相信 閱讀(501) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): Swing文章

          評(píng)論

          # re: 在戰(zhàn)牛刀(不停震動(dòng)的Dialog) 2011-03-24 10:34 venusdrogon

          樓主,我發(fā)現(xiàn)我開(kāi)始崇拜你了   回復(fù)  更多評(píng)論   

          # re: 在戰(zhàn)牛刀(不停震動(dòng)的Dialog) 2011-03-24 10:35 相信

          我只是一只在飛翔的菜鳥(niǎo)....  回復(fù)  更多評(píng)論   

          <2011年3月>
          272812345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          不顯示applet

          常用鏈接

          留言簿(16)

          我參與的團(tuán)隊(duì)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          新聞檔案

          相冊(cè)

          swingchina 專(zhuān)業(yè)搞Swing的網(wǎng)站

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 乌拉特后旗| 无锡市| 碌曲县| 金秀| 桦南县| 江川县| 陆丰市| 大荔县| 星子县| 泗水县| 江陵县| 景德镇市| 高州市| 屯昌县| 五华县| 江永县| 聊城市| 固镇县| 彩票| 梁平县| 宜黄县| 互助| 宾阳县| 龙口市| 新河县| 来宾市| 乌海市| 吴川市| 东乌珠穆沁旗| 抚松县| 双桥区| 娱乐| 齐河县| 布拖县| 外汇| 运城市| 上栗县| 兰考县| 胶南市| 海阳市| 三明市|