如何在定时器倒计时0后禁用JButton

时间:2015-02-09 07:48:42

标签: java timer

我正在点击游戏程序。用户必须键入时间限制(以秒为单位)。如果值为正,则启用单击按钮。当时间用完时,单击按钮将被禁用。这是我当前代码的一部分: 我似乎无法使用setInterval()返回的值,并在计时器到达0后禁用我的Click按钮。

public void actionPerformed(ActionEvent a) {
     if (a.getSource()==startButton){
            try{
                    String sec = timeField.getText();
                    int delay = 1000;
                    int period = 1000;
                    timer = new Timer();
                    interval = Integer.parseInt(sec);

                    if(interval > 0){
                        timeLeft.setText("Time left: " + sec);
                          timeLeft.setText("Start!");
                          clickButton.setEnabled(false);



                        if(setInterval() > 0){
                            timer.scheduleAtFixedRate(new TimerTask() {
                                public void run() {
                                      timeLeft.setText("Time left: " + String.valueOf(setInterval()));
                                    }
                                }, delay, period);

                            clickButton.setEnabled(true);
                        }else{
                            System.out.print(String.valueOf(setInterval()));
                            clickButton.setEnabled(false);  
                            }

                    } else {
                        JOptionPane.showMessageDialog(null, "Error! Please enter postivie Interger! ", "Error", JOptionPane.ERROR_MESSAGE);
                    }
            }
            catch(NumberFormatException e){
                JOptionPane.showMessageDialog(null, "Error! Please enter Integer! ", "Error", JOptionPane.ERROR_MESSAGE);
            }
    }
     else if(a.getSource()==clickButton)
     {
         clickCOunter++;
         clickLabel.setText("Clicks: " + clickCOunter);
     }
}

 private static final int setInterval() {
        if (interval == 1)
            timer.cancel();
        return --interval;
    }

1 个答案:

答案 0 :(得分:1)

在你的情况下,我会放置一个System.out.println(setInterval());在if(setInterval() > 0) {支票正上方。这样你就可以观察到价值变化的方式。

作为一般提示,您不必使用String.valueOf(...)来打印数字。删除它也将使您的代码更容易阅读。 另外,请务必排列花括号({})。这也将使您的代码更易于阅读和调试。

最后,如果我可以提出一个建议,会对你的问题采取稍微简单的方法。如果您使用Swing计时器,则可以在actionPerformed()方法之外创建它,并将其设置为定期调用actionPerformed()。这样,actionPerformed()内的逻辑可以简化很多。 请查看Swing计时器的文档。Swing Timer docs