0

我正在使用带有 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

4 回答 4

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;
        }
    }
}
于 2013-11-04T11:33:12.150 回答
0

我猜这里不需要计时器。

最初只需花时间,每当有人点击时,ActionListener如果它在初始时间 3 秒内,请检查您的实现,如果是,则增加点击次数。

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

更新

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

于 2013-11-03T15:38:54.740 回答
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使用我的代码,您可以避免打印时间。

于 2013-11-03T15:52:00.750 回答
0

我猜你想在 3 秒后发生其他事情;即,用户第一次按下按钮,计时器开始,用户再按下按钮几次,3秒后,您会弹出一条消息,说明他按下按钮的次数,或者在3秒后执行其他操作. 这些是在你的问题描述中说出来的有用的东西,否则人们会说你不需要计时器。

并且,按照这种方式描述,它指出计时器不仅仅用于计算点击次数。如果是我,我会创建一个列表并存储每个按钮单击的时间戳,然后,在计时器之后触发的侦听器中,我会计算适合窗口的时间戳数,而不是次数用户按下按钮。问题是,如果在最后一两个按钮单击侦听器执行之前没有安排计时器触发侦听器,您可能会偏离一两个。

要使用它,请创建具有所需延迟的时间,添加一个动作侦听器,然后在动作侦听器中选择按钮单击列表,分析窗口内发生了多少次,然后做任何你想做的事情。

于 2013-11-03T16:33:45.740 回答