为了账号安全,请及时绑定邮箱和手机立即绑定

定时器启动后可切换按钮不起作用

定时器启动后可切换按钮不起作用

阿晨1998 2023-02-16 17:21:20
我正在尝试制作一个可切换的按钮来启动和停止倒数计时器。它会启动计时器但不会停止。我有点像 java 和 swing 之类的初学者,有人能帮忙吗?这是一些代码:private static Timer timer;timer = new Timer(1000, new ActionListener() {    @Override    public void actionPerformed(ActionEvent e) {        l1.setText(Integer.toString(timeLeft / 60) + ":" + Integer.toString(timeLeft % 60));        timeLeft--;        if (timeLeft == 0) {            boolean rest = false;            if (rest) {                timeLeft = workTime;                JOptionPane.showMessageDialog(null, "Times Up!");                rest = false;            } else {                timeLeft = restTime;                JOptionPane.showMessageDialog(null, "Times Up!");                rest = true;            }        }    }});b1.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent evt) {        boolean start = true;        if (start == true){            timer.start();            b1.setText("stop");            start = false;        } else if (start == false){            timer.stop(); //the part that doesn't work            b1.setText("start");            start = true;        }    }});这不是确切的代码,而是重要的部分
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

因为在 b1.addActionListener 上你设置了 boolean start = true; 这意味着每当你回到你的 actionPerformed 监听器时,start = true你总是需要在 actionPerformed 之外声明和初始化。


b1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent evt) {

        boolean start = true;

        if (start == true){

            timer.start();

            b1.setText("stop");

            start = false;

        } else if (start == false){

            timer.stop(); //the part that doesn't work

            b1.setText("start");

            start = true;

        }

    }

});

建议:您还可以声明您的boolean start;类后并在默认构造函数中初始化start=true;,您可以在代码中使用 start 变量。


或者简单的 例子


private static Timer timer;

boolean start = true;

boolean rest = false;

timer = new Timer(1000, new ActionListener() {

    @Override

    public void actionPerformed(ActionEvent e) {

        l1.setText(Integer.toString(timeLeft / 60) + ":" + Integer.toString(timeLeft % 60));

        timeLeft--;

        if (timeLeft == 0) {

            if (rest) {

                timeLeft = workTime;

                JOptionPane.showMessageDialog(null, "Times Up!");

                rest = false;

            } else {

                timeLeft = restTime;

                JOptionPane.showMessageDialog(null, "Times Up!");

                rest = true;

            }

        }

    }

});

b1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent evt) {

        if (start == true){

            timer.start();

            b1.setText("stop");

            start = false;

        } else if (start == false){

            timer.stop(); //the part that doesn't work

            b1.setText("start");

            start = true;

        }

    }

});


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信