递增数字

时间:2014-07-24 07:00:00

标签: java swing timer mouselistener

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

  • 我初个化了int value = 0;

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

  • 变量“value”现在为1,它是奇数,因此它将打印出来,“奇数”,一秒后,变量值将增加1;

  • 变量“value”现在为2,它是偶数,因此它将再次允许用户点击JFrame 2次。点击2次后,系统将打印出“均匀”,一秒后打印出来 变量“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();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:3)

我认为你的代码中出现了一个小的逻辑错误......

如果你看看这一节......

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;
}

否则您将永远无法再次触发"even"部分......