定时器和键绑定同时进行

时间:2014-05-17 04:59:01

标签: java swing timer count

所以基本上我在jpanel上使用键绑定来启动计时器。我试图弄清楚如何再次使用键绑定,但计时器仍在进行,以增加计数。

m2.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke
(KeyEvent.VK_LEFT,0,true),"left");
    m2.getActionMap().put("left",new Actions());


public void Timer(boolean startTimer){
    if(startTimer==true){
        long staTime = System.currentTimeMillis();
        while(startTimer==true){
            System.out.println(System.currentTimeMillis()/1000.0-staTime/1000.0);
        }
    }
}

public class Actions extends AbstractAction {

private static final long serialVersionUID = 1L;
int start = 0;
int count = 0;
    public void actionPerformed(ActionEvent e) {
        Begin b = new Begin();
        if(start==0){   
            start++;
            b.Timer(true);
        }
        count++;
        System.out.println(count);
        if(count==10){
            b.Timer(false);
        }

}

1 个答案:

答案 0 :(得分:0)

我不知道该代码试图做什么。看起来你想要创建自己的Timer。好吧,Swing已经有了一个Timer类,所以不要重新发明轮子。

阅读How to Use Swing Timers上Swing教程中的部分以获取更多信息。 Swing Timer API还有一些方法允许您动态更改Timer触发的时间间隔。

本教程中的Timer示例相对复杂。这是一个简单的例子:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

public class TimerTime extends JPanel implements ActionListener
{
    private JLabel timeLabel;

    public TimerTime()
    {
        timeLabel = new JLabel( new Date().toString() );
        add( timeLabel );

        Timer timer = new Timer(1000, this);
        timer.setInitialDelay(1);
        timer.start();
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        //System.out.println(e.getSource());
        timeLabel.setText( new Date().toString() );
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("TimerTime");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new TimerTime() );
        frame.setLocationByPlatform( true );
        frame.pack();
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}