使用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()           }

原创粉丝点击