java - 棋钟时间递减

标签 java timer

我正在尝试构建一个国际象棋时钟来学习,但我被下面的代码困住了。我将像这样使用actionListener。当按下“白色”按钮时,blackTime 每秒减一,当按下“黑色”按钮时,whiteTime 每秒减一。

现在我的问题是找到一种方法来减少每秒的时间。我看到一些这样的问题,他们谈到了Timer类。我从未使用过它,我的理解是它需要一个 ActionListener。我已经在使用一个,所以我要添加另一个还是有更简单的方法?

谢谢!

public class ChessClock extends JFrame implements ActionListener {

JPanel p;
JButton b1,b2;
JLabel l1;

public ChessClock(){
    super();
    this.setVisible(true);
    this.setSize(600,400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    int whiteTime = 59;
    int blackTime = 59;

    p = new JPanel(new GridBagLayout());
    b1 = new JButton("White");
    b2 = new JButton("Black");

    l1 = new JLabel("00:" + whiteTime + " - " + "00:" + blackTime, SwingConstants.CENTER);
    l1.setFont(new Font("Serif", Font.PLAIN, 85));

    b1.setPreferredSize(new Dimension(200,100));
    b2.setPreferredSize(new Dimension(200,100));

    b1.addActionListener(this);
    b2.addActionListener(this);

    GridBagConstraints c = new GridBagConstraints();

    c.insets = new Insets(40,40,40,40);
    p.add(b1,c);
    p.add(b2,c);

    this.add(p, BorderLayout.SOUTH);
    this.add(l1, BorderLayout.CENTER);
}

public void actionPerformed(ActionEvent e){ //will later be used to switch between whiteTime - blackTime
    String s = e.getActionCommand();
        if(s == "White")
            s = s; 
        if(s == "Black")
        s = s;
}

}

最佳答案

来自Java Docs ,

  int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          if(blackTurn)
             black--;
          else if(whiteTurn)
             white--;
      }
  };
  new Timer(delay, taskPerformer).start();

我认为一般来说你应该避免使用Thread.sleep()并使用内置的计时器类!带有 Thread.sleep() 的 while 循环将暂停线程并等待,而计时器则不会。

所以是的,创建另一个执行的操作!

关于java - 棋钟时间递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24393803/

相关文章:

javascript - 如何通过倒计时更改 margin 值?

c# - 如果中间发生另一个事件,调度程序计时器如何在滴答事件中执行其工作?这段代码有什么问题?

java - Gradle子项目无法访问自己的资源

java - 调用 Weka 时找不到或加载主类

java - google-api-java-client:setForMine(true) 导致 invalidSearchFilter 错误

java - 在java中计算jslider进度条

python - 有没有办法阻止计时器蠕变?

java - 为什么我的图片不显示? ( java )

javascript - 为什么我的最新代码会覆盖我的其余代码

c++ - 如何与程序的其余部分同时显示计时器?