【问题标题】:Incrementing numbers递增数字
【发布时间】:2014-07-24 06:59:59
【问题描述】:
  • 我有一个变量值,用于跟踪数字是奇数还是偶数。

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

  • 变量“value”现在为0,点击2次后系统会打印出“偶数”,1秒后变量“value”加1;

    李>
  • 变量“value”现在是 1,它是奇数,所以会打印出“odd”,一秒钟后,变量 value 会加 1;

  • 变量“value”现在是 2,它是偶数,所以它会再次允许用户点击 JFrame 2 次。点击2次后,系统会打印出“偶数”,一秒后, 变量“value”将加 1;

  • 变量“value”现在是 3,它是奇数,所以它会打印出“odd”,一秒钟后,变量 value 将增加 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();
            }
        });
    }
}

【问题讨论】:

  • 根据我的测试,当我双击框架时,计时器启动,它倒计时并递增value 并将countdown 设置为1。此时无法重新启动计时器,因为值现在是奇数...

标签: java swing timer mouselistener


【解决方案1】:

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

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

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" 部分...

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 2012-10-19
    • 2020-07-04
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多