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()
}
使用Swing实现窗体震动效果(运用了Timer类)
最新推荐文章于 2021-09-25 22:33:09 发布