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

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()
    
    
   

}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值