import javax.swing.*;import java.awt.*;import java.util.Timer;import java.util.TimerTask;import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;public class T {private static int click = 0;//点击多少次private static int time = 60;//剩余多少秒public static void main(String[] ...
java计算鼠标点击次数的题,急求!
我没有用到题目里给的计算时间差来计算,想不明白有啥用。
另外我就没布局了,随便做了个界面美化你自己想办法吧。
代码为:
import javax.swing.*;import java.awt.*;import java.util.Timer;import java.util.TimerTask;import static javax.swing.WindowConstants.DISPOSE_ON_CLOSE;public class T {private static int click = 0;//点击多少次private static int time = 60;//剩余多少秒public static void main(String[] args) {JFrame jFrame = new JFrame();//设置默认布局jFrame.setLayout(new FlowLayout());//设置窗口的属性 窗口位置以及窗口的大小jFrame.setBounds(200, 200, 300, 200);//设置窗口可见jFrame.setVisible(true);//设置关闭方式 如果不设置的话 似乎关闭窗口之后不会退出程序jFrame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);//得到窗口的容器Container conn = jFrame.getContentPane();JLabel jLabel1 = new JLabel("点击次数:" + click + "");JLabel jLabel2 = new JLabel("剩余时间:" + time + "秒");JButton jButton = new JButton("点我点我");jButton.setBounds(50, 50, 100, 20);jButton.setBackground(Color.CYAN);Timer timer = new Timer();//利用计时器计时jButton.addActionListener(e -> {//为按钮添加事件if (time > 0) {//剩余时间大于0才触发事件jLabel1.setText("点击次数:" + ++click);timer.schedule(new TimerTask() {@Overridepublic void run() {try {Thread.sleep(1000);jLabel2.setText("剩余时间:" + --time + "秒");if (time == 0) {timer.cancel();//停止计时}} catch (InterruptedException e1) {e1.printStackTrace();}}}, 0);}});conn.add(jLabel1);conn.add(jButton);conn.add(jLabel2);}}
运行结果:
没开始点的时候:
开始点:
到时间后还是能点,但是点击次数就不会增加了,计时器也停止了。
修改部分代码:
Timer timer = new Timer();//利用计时器计时final boolean[] onClock = {false};//因为相当于监听事件用了匿名类,这里必须这么写jButton.addActionListener(e -> {//为按钮添加事件if (!onClock[0]) {//第一次点击时才触发timer.schedule(new TimerTask() {@Overridepublic void run() {jLabel2.setText("剩余时间:" + --time + "秒");if (time == 0) {timer.cancel();//停止计时}}}, 1000, 1000);//延迟1秒,并每隔1秒执行一次onClock[0] = true;}if (time > 0) {//剩余时间大于0才触发事件jLabel1.setText("点击次数:" + ++click);}});
这样才正确,确保只启用一个计时器Timer,也只有1个计时器任务TimerTask
2020-06-28