如何在java上以一定的间隔使计时器停止

时间:2013-11-03 15:27:39

标签: java swing timer jbutton

我正在使用带有JButton的java swing。当我按下按钮时,我想要一个计时器启动并计算我在三秒钟内按下按钮的次数。我正在尝试使用java.util.timer计时器。这是正确的方法吗?如何启动计时器并在三秒钟后停止计时器?

import javax.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.util.Timer;
import java.awt.*;
import java.awt.event.*;

public class button{
    public static void main(String[] args){
      JFrame frame = new JFrame("Test");
      frame.setVisible(true);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //frame.setSize(100, 75);
    JPanel panel = new JPanel();
    frame.add(panel);
    JButton button = new JButton ("                           ");
    button.setSize(300, 150);
    panel.add(button);
    button.addActionListener(new Action());
    frame.setAlwaysOnTop(true);
    frame.setBounds(1225, 675, 100, 75);        
    }
 static class Action implements ActionListener{
    public void actionPerformed (ActionEvent e){

    }
}
 public static int timer(){
     Timer timer = new Timer();      
     return 7;
 }
}

4 个答案:

答案 0 :(得分:0)

我猜这里不需要计时器。

最初获取时间,并且只要有人点击您的ActionListener实施内容,如果它距离初始时间为3秒,则增加点击次数,如果是这样的话。

如果您不需要跟踪任何进一步的点击,您甚至可以在跟踪您不再感兴趣的点击后取消注册动作监听器。

<强>更新

您声称要使用Timer,但是基于此http://www-mips.unice.fr/Doc/Java/Tutorial/uiswing/misc/timer.html Timer将用于延迟(或重复)任务触发。我不认为它适合您的使用案例。

答案 1 :(得分:0)

您可以在没有计时器的情况下执行此操作:

// Time button being pressed
long milliseconds = 0;

JButton myButton = new JButton();

// Listener to click, press, release etc
myButton.addMouseListener(new MouseAdapter(){
    @Override
    public void mousePressed(MouseEvent e){
        milliseconds = System.currentTimeMillis();
    }
    @Override
    public void mouseReleased(MouseEvent e){
        long end = (milliseconds - System.currentTimeMillis()); // to seconds
        System.out.println(String.format("You have pressed the button for %ld milliseconds", end));
    }
});

对于“在3秒的时间间隔内”我不明白你的意思,但你可以避免使用我的代码milliseconds > 3000打印时间。

答案 2 :(得分:0)

我猜你想要在3秒后发生其他事情;即,用户第一次按下按钮,计时器启动,用户再次按下按钮,3秒后,会弹出一条消息,说明他按下按钮多少次,或者在3秒后做其他事情。 。这些是在你的问题描述中有用的东西,否则人们会说你不需要计时器。

并且,这样描述,它指出计时器不仅仅用于计算点击次数。如果是我,我会创建一个列表并存储每个按钮单击的时间戳,然后,在计时器之后触发的监听器中,我将计算窗口内适合的时间戳的数量,而不是用户按下按钮。问题是,如果在最后一次或两次按钮点击 - 侦听器执行之前没有调度timer-firing-listener,你可能会被一两个关闭。

要使用它,请使用您想要的延迟创建时间,添加动作侦听器,然后在动作侦听器中,选择按钮单击列表,分析窗口内发生的次数,然后执行其他操作你想要的。

答案 3 :(得分:0)

static class Action implements ActionListener {
    int count;
    Long startTime;

    public void actionPerformed(ActionEvent e) {
        if (startTime != null && System.currentTimeMillis() - startTime <= 3000) {
            if (count == 2) {
                System.out.println("Bingo");
                count = 0;
                startTime = null;
            } else {
                count++;
            }
        } else {
            startTime = System.currentTimeMillis();
            count = 1;
        }
    }
}