java - 如何创建重置和暂停计时器的按钮?

标签 java swing timer jbutton

如何使显示的两个按钮重置/暂停计时器?计时器可以工作,但我想更改按钮的代码,以便它们更改计时器而不是输出到控制台。谢谢。

代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class createWindow extends JFrame implements ActionListener
{
public static void main(String[] args)
{
    new createWindow();
}//end main

createWindow()
{
    super("Frame");
    setSize(400,70);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new FlowLayout());
    show();

        final JLabel time = new JLabel("Timer");
        JButton reset = new JButton("Reset timer");
        JButton pause = new JButton("Pause timer");
        reset.setActionCommand("resetClicked");
        pause.setActionCommand("pauseClicked");
        reset.addActionListener(this);
        pause.addActionListener(this);
        add(pause);
        add(time);
        add(reset);

    long start = System.currentTimeMillis();

    while (true)
        {
            long  timer = System.currentTimeMillis() - start;
            final int seconds = (int) (timer / 1000);
            String display = Integer.toString(seconds);
            time.setText(display);
        }//end while loop
    }//end constructor

@Override
public void actionPerformed(ActionEvent e) 
{
    String buttonClicked = e.getActionCommand();
    if(buttonClicked.equals("resetClicked"))
    {
        System.out.println("The reset button was clicked"); //Change to reset timer
    }
    else if(buttonClicked.equals("pauseClicked"))
    {
        System.out.println("The pause button was clicked"); //Change to pause timer
    }
}//end listener
}

最佳答案

不要使用无限的 while 循环。这会阻止EDT。而是使用 Swing Timer 。这将使您能够控制启动和停止计时器

Stopwatch Example

<小时/>

附注:

  • 不要使用 JFrame.show,因为该方法已弃用。请改用 JFrame.setVisible。当所有组件都添加到框架中时,也进行此调用。
  • JButtons 的功能有很大不同,因此需要为每个按钮使用单独的 ActionListener 实例。
  • 首选方法是直接使用 JFrame 实例,而不是扩展它。
  • Java 中的类名称以大写字母开头,因此 createWindow 将变为 CreateWindow

关于java - 如何创建重置和暂停计时器的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14630323/

相关文章:

java - 无法在 AsyncTask 中为 ProgressDialog 调用 Looper.prepare() 的线程内创建处理程序

java - ActionListener 无法通过按钮将数据从 JList 移动到其他 JList

Java - 计时器在执行后未被删除

c# threading Timer 需要自己停止异步套接字代码

java - 使用 Java 和 Expectit 交互进入启用模式

java - Android - 如何从其他类访问已创建的数据库?

java - 将一个进程 JFrame 嵌入到另一个进程 JFrame 中

java - 涉及java中背景图像的奇怪错误

python - PyQT 从 .txt 文件读取和更新 TextEdit

java - 使用 while 和 if else 循环返回