⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialogearthquakecenter.java

📁 《SWING HACKS》源码 作者: Joshua Marinacci,Chris Adamson 著 徐晔 译 出版: 2007年2月
💻 JAVA
字号:
import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DialogEarthquakeCenter extends Object {    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 = 5;    private JDialog dialog;    private Point naturalLocation;    private long startTime;    private Timer shakeTimer;    private final double HALF_PI = Math.PI / 2.0;    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) {                              // calculate elapsed time                              long elapsed = System.currentTimeMillis() -                                  startTime;                              // use sin to calculate an x-offset                              double waveOffset = (elapsed % SHAKE_CYCLE) /                                  SHAKE_CYCLE;                              double angle = waveOffset * TWO_PI;                              // offset the x-location by an amount                               // proportional to the sine, up to                              // shake_distance                              int shakenX = (int) ((Math.sin (angle) *                                                    SHAKE_DISTANCE) +                                                   naturalLocation.x);                              dialog.setLocation (shakenX, naturalLocation.y);                              dialog.repaint();                              // should we stop timer?                              if (elapsed >= SHAKE_DURATION)                                  stopShake();                          }                      }                      );        shakeTimer.start();    }    public void stopShake() {        shakeTimer.stop();        dialog.setLocation (naturalLocation);        dialog.repaint();    }public static void main (String[] args) {    JOptionPane pane =        new JOptionPane ("You've totally screwed up your login\n" +                         "Go back and do it again... and do you think\n"  +                         "you could remember your password this time?",                         JOptionPane.ERROR_MESSAGE,                         JOptionPane.OK_OPTION);    JDialog d = pane.createDialog (null, "Shakin'!");    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);}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -