国际时间减少

时间:2014-06-24 18:30:37

标签: java timer

我正在尝试建立一个国际象棋时钟来学习,我仍然坚持使用下面的代码。我会像这样使用actionListener。什么时候"怀特"按下按钮,blackTime将每秒递减一次,当" Black"按下按钮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;
}

}

2 个答案:

答案 0 :(得分:1)

来自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循环将保持线程并等待,而计时器则不会。

是的,创建另一个动作!

答案 1 :(得分:0)

如何:

While(condition){
    Thread.sleep(1000);
    if(//White button pressed){
        blackTime--;
    }else{
        whiteTime--;
}

在执行下面的代码之前会等待1秒。