java - 递增数字

标签 java swing timer mouselistener

  • 我有一个变量值,用于跟踪数字是奇数还是偶数。

  • 我初始化了一个int value = 0;

  • 变量“value”现在为0,点击2次后,系统会打印出“even”,一秒后,变量“value”自增1;

    <
  • 变量“value”现在是 1,它是奇数,所以它会打印出“奇数”,一秒钟后,变量值将递增 1;

  • 变量“值”现在为 2,它是偶数,因此它将再次允许用户在 JFrame 上单击 2 次。点击2次后,系统会打印出“even”,一秒后, 变量“value”将递增 1;

  • 变量“value”现在是 3,它是奇数,所以它会打印出“奇数”,一秒钟后,变量值将递增 1;

    等等……

这一直持续到我关闭程序。


我将“值”放入我的计时器中并递增它,但是“值”在倒计时后没有递增。为什么它不增加?请帮忙。

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

@SuppressWarnings("serial") 
public class OnClickLesson extends JFrame   {

    private int value = 0, clicked = 0, countdown = 1;
    private Timer timer = new Timer(1000, null);
    public OnClickLesson() {
        timer = new Timer(1000, new countDownTimer());  

        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {        
                if(value%2 == 0) {
                    clicked++;
                    if(clicked == 2) {
                        System.out.println("even");
                        timer.start();      
                    }
                }
            }
        });

        if(value%2 == 1) {
            System.out.println("odd");
            timer.start();          
        }

        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        pack();
        setSize(400,600);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private class countDownTimer implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {

            if (countdown == 0) {
                timer.stop();   
                countdown = 1;
                value++;
            }           

            else {
                System.out.println("Countdown " + countdown--);
            }
        }
    }

    public static void main(String[] args) {    
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new OnClickLesson();
            }
        });
    }
}

最佳答案

我认为您在代码中犯了一个小的逻辑错误...

如果你看一下这个部分...

addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {        
        if(value%2 == 0) {
            clicked++;
            if(clicked == 2) {
                System.out.println("even");
                timer.start();      
            }
        }
    }
});

if(value%2 == 1) {
    System.out.println("odd");
    timer.start();          
}

我相信 if(value%2 == 1) {... 语句应该在 mousePressed 方法中...

addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {        
        if(value%2 == 0) {
            clicked++;
            if(clicked == 2) {
                System.out.println("even");
                timer.start();      
            }
        } else if(value%2 == 1) {
            System.out.println("odd");
            timer.start();          
        }
    }
});

这样,当 mousePressed 被调用时,它可以平等地评估两种状态。

此外,我认为您应该重置 clicked

clicked++;
if(clicked == 2) {
    System.out.println("even");
    timer.start();      
    clicked = 0;
}

否则你将永远无法再次触发“偶数”部分......

关于java - 递增数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24927025/

相关文章:

java - 将表单添加到 Swing Menu 应用程序

c - 如何在 Windows 上用 C 实现定时器

java - 如何确保Java类中的两个方法至少之一被重写?

java - Glassfish javax.ejb.EJBException

java - JUnit 中什么可以终止测试

java - 为什么对 Base64 类的调用会返回不同的结果?

java - 如何使用 JCheckBox 启用/禁用 JTextField?或者我的代码有什么问题?

java - JButton 未出现在 GUI 上

c# - 每 n 秒调用一次存储过程

javascript - 如何在完成后重置计时器组件