使用Swing实现窗体震动效果(运用了Timer类)
来源:互联网 发布:mac word 繁简转换 编辑:程序博客网 时间:2024/06/03 20:42
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() }