用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"); }}