我正在使用带有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;
}
}
答案 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;
}
}
}