我的一个朋友给了我这个代码用于计时器。我必须说我是初学者,所以我不明白@Override是什么,但代码适用于其他朋友。
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
有什么问题?
答案 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);
这应该可以做到!