我需要在我的应用程序中实现一个计时器,它将在10秒到0秒之间进行倒计时。
并在JLabel
显示倒计时。
这是我的实施;
...
Timer t = new Timer(1000, new List());
t.start();
}
class List implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
int sec = 0;
label.setText(""+sec);
// Do a if- condition check to see if the clock has reached to, and then stop
}
}
我期待JLabel从0到10开始计数然后停止。但事实并非如此。 JLabel设置值0
并且它不会增加。
更新1
t = new Timer(1000, new Listner());
t.start();
}
class Listner implements ActionListener{
private int counter = 0;
@Override
public void actionPerformed(ActionEvent e) {
lable.setText(""+ (counter++));
if (counter == 10)
t.removeActionListener(this);
}
}
答案 0 :(得分:4)
每次调用计时器时都会将int变量sec声明为0.因此Label不会更新。
您应该将sec变量声明为全局变量,然后在actionPerformed方法中每次调用它时都会增加其值。
public int sec = 0;
class List implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
sec++;
label.setText(""+sec);
// Do a if- condition check to see if the clock has reached to, and then stop
}
}
答案 1 :(得分:4)
您没有在任何地方存储或递增secs
,所以我看不到它应该如何更新,请尝试使用
Timer timer;
void start() {
timer = new Timer(1000,new List());
}
class List implements ActionListener {
private counter = 0;
@Override
public void actionPerformed(ActionEvent e) {
label.setText(""+counter++);
if (counter == 10)
timer.removeActionListener(this);
}
}
请注意,您需要在某个位置存储对计时器的引用,以便在倒计时完成后从其中删除侦听器。
答案 2 :(得分:3)
一个完整的例子
public class ATimerExample {
Timer timer;
int counter = 0;
public ATimerExample() {
final JFrame frame = new JFrame("somethgi");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JLabel label = new JLabel("0");
JPanel panel = new JPanel();
panel.add(label, BorderLayout.SOUTH);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label.setText(String.valueOf(counter));
counter++;
if (counter == 10) {
//timer.removeActionListener(this);
timer.stop();
}
}
});
timer.start();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ATimerExample();
}
});
}
}
答案 3 :(得分:1)
由于java以毫秒为单位读取时间,因此它应该是10000而不是1000.尝试使用您的代码并查看是否有效。当我想要30秒时,我遇到了同样的问题。而不是写Timer T = new Timer(30000,new List()); t.start();
我写了Timer t = new Timer(3000,new List()); t.start();
这让我的程序在3秒后停止。我建议你使用10000而不是1000.
请记住:在List类中执行:t.stop()。感谢