您的位置:首页 > 其它

使用Swing实现窗体震动效果(运用了Timer类)

2013-09-25 19:58 337 查看
package com.java029.timer_swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

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

/**
* swing测试(使用Timer、TimerTask、局部内部类)
* @author ml1990s
*
*/
public class Shake {
public static void main(String[] args) {
//给定初始位置
init(500,200);
}

public static void init(final int x, final int y) {
final JFrame mainFrame = new JFrame("我的测试");
mainFrame.setBounds(x, y, 300, 300);
//为主Frame添加监听
mainFrame.addWindowListener(new WindowListener(){

@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}

@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub

}

});
mainFrame.setVisible(true);
final JButton button = new JButton("开始");
button.addActionListener(new ActionListener() {
//local inner class
class Task extends TimerTask {

int xx = x;
int yy = y;
@Override
public void run() {
//设置震动效果
if(xx == x && yy ==y){
mainFrame.setLocation(xx+=50, yy+=50);
}else{
mainFrame.setLocation(xx-=50, yy-=50);

}

}
}//end inner class

// 局部内部类(Local inner class)必须先声明,后使用
Task t = new Task();
Timer timer = new Timer();

@Override
public void actionPerformed(ActionEvent e) {

String buttonText = button.getText();
if (buttonText.equals("开始")) {
button.setText("结束");
//给定时间间隔多次执行同一t给定的行为
timer.schedule(t, new Date(), 80);
} else {
button.setText("开始");
//以下两行代码与下面注释掉的等效
t.cancel();
t = new Task();

/*
//终止此计时器,丢弃所有当前已安排的任务。
timer.cancel();
//因为上一条代码抛弃了使用的t(TaskTimer对象),所以新建对象
t = new Task();
timer = new Timer();
*/
}

}//end actionPerformed

});

mainFrame.add(button);

}// end init()

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: