计时器感觉不像重写

时间:2015-01-11 09:32:30

标签: java timer override superclass

我的一个朋友给了我这个代码用于计时器。我必须说我是初学者,所以我不明白@Override是什么,但代码适用于其他朋友。

  • tijd是一个值为10
  • 的int
  • lx是标签的x值
  • s1也是一个值为3
  • 的int

Eclipse谈到了公共空白行:

  

此行有多个标记:

     
      
  • new ActionListener(){}类型的actionPerformed(ActionEvent)方法必须覆盖超类方法
  •   
  • 实现java.awt.event.ActionListener.actionPerformed
  •   

代码是:

 final Timer t = new Timer(tijd, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        lx = lx-s1;
    }
});
t.start();

有了删除@Override的建议,但由于我不确定它的作用,我不知道我是否会删除代码中的重要内容。我想它并不存在,因为有人认为包含代码会很有趣。

所以我的问题是: 1.如何移动标签? 2. @Override有什么问题?

2 个答案:

答案 0 :(得分:0)

你在这里做的是现场创建一个ActionListener接口的匿名实现,并直接将它作为Timer构造函数Timer(int x,ActionListener y)的第二个参数传递。 此接口的任何实现都必须提供ActionPerformed(ActionEvent e)方法的实现,因此您可以提供此实现。从Java 6开始,接口方法的实现必须使用@Override标记进行注释。如果您使用的是Java 5,则它是可选的。 您可以使用命名(非匿名)类编写这样的代码:

static class LabelMover implements ActionListener {
  @Override
  public void actionPerformed(ActionEvent e) {
  ...
  }
}

Timer timer = new Timer (tijd, new LabelMover());

这会导致相同的行为。 但问题是:你在这里使用哪个Timer类? Java Timer类(java.util.Timer)没有将ActionListener作为第二个参数的构造函数。 如果你希望标签每隔几毫秒递增一次,那么你应该创建一个TimerTask,然后创建一个Timer并使用该计时器安排TimerTask:

static class LabelMover implements TimerTask {
    @Override
    public void run() {
    // code to move the label
    }
}
Timer timer = new Timer();
timer.schedule(new TimerTask(), 0, tijd);

答案 1 :(得分:0)

嗯,在这种情况下,@ Override确实可以忽略不计。然而,移动标签的代码非常重要。 你应该以此为基础:

在计时器的动作监听器中执行以下操作:x = x - 1; 然后是Label.setLocation(x,y);

这应该可以做到!