首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

java.swing.Timer解决方案

2012-01-24 
java.swing.Timer用java.swing.Timer的Timer类时如何它在满足一定条件时停止啊?比如在Timer的动动作中实现

java.swing.Timer
用java.swing.Timer的Timer类时如何它在满足一定条件时停止啊?
比如在Timer的动动作中实现以下功能:一个按钮是用来设置一个面板m的Loction的,每一动一次,m的X坐标加40。运行程序之后,我按下按钮,m就一直往左边移动,实现动态的效果,可是我不想m一直往左边移动,我只想它移动五次或者几次之后就停止运动,这个应该怎么做啊?(我看Timer的JDK,看到它在start之后就一直在Timer的Aciton中重复运动,不出来了,我在外面控制不了Timer了,而在Aciton里面控制Timer,让它停下来不知道怎么实现,)
  其实我想问的很简单,就是我传递一个参数,比如5,然后m就移动5次之后就停下来,不再移动。这个怎么实现,各位大哥说说自己的看法,这个能实现不?

[解决办法]
肯定可以空Timer在一定的条件控制,木有问题的
[解决办法]
for example

Java code
final Timer timer = new Timer(1000, new ActionListener() {    int count = 0;    public void actionPerformed(ActionEvent e) {        //do something here        count++;        if (count == xxx) {timer.stop();}            }});
[解决办法]
这个可以用内部类的方法来解决,给你贴一个用javax.swing.Timer实现的具体实例
是一个很简单的倒计时功能,只是执行10次就控制停止了
Java code
import javax.swing.*;import java.awt.*;import java.awt.event.*;public class NumberDemo extends JFrame{    private int number=10;//初始值为10        private JButton numBtn;        private Timer timer;        private class NumListener implements ActionListener{        @Override        public void actionPerformed(ActionEvent event) {            // TODO Auto-generated method stub             numBtn.setText(number+"");             number--;             if (number == 0) {                 numBtn.setText("stop");                 number=10;                 timer.stop();                 numBtn.setEnabled(true);             }        }            }        public NumberDemo(String title){        super(title);        numBtn=new JButton("Click");        numBtn.addMouseListener(new MouseListener(){            @Override            public void mouseClicked(MouseEvent e) {                // TODO Auto-generated method stub                Object source = e.getSource();                  if (source == numBtn && numBtn.isEnabled()) {                        numBtn.setEnabled(false);                      timer=new Timer(1000,new NumListener());                      timer.start();                  }            }            @Override            public void mouseEntered(MouseEvent arg0) {                // TODO Auto-generated method stub                            }            @Override            public void mouseExited(MouseEvent arg0) {                // TODO Auto-generated method stub                            }            @Override            public void mousePressed(MouseEvent arg0) {                // TODO Auto-generated method stub                            }            @Override            public void mouseReleased(MouseEvent arg0) {                // TODO Auto-generated method stub                            }                    });        this.add(numBtn);        this.pack();        this.setLocationRelativeTo(null);        this.setVisible(true);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }        public static void main(String[] args){        new NumberDemo("NumberDemo");    }} 

热点排行