我基本上希望它按“空格”来启动计时器,然后在某个Y坐标点之后停止它,然后在按下“空格”键时再次启动,如果这样做的话。实际上它并没有真正完全停止而不是“清除”所以我有点失去了。如果您有任何想法请分享!!
iv一直在思考,我可能需要一个我的计时器的字符串,这是我以前从未做过的,所以任何帮助或文章的链接都会有所帮助
这是iv到目前为止所做的事情。
if (evt.getKeyCode() == KeyEvent.VK_SPACE) {
long počasi=10;
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
y1 = y1 - 1;
jButton2.setLocation(x1, y1);
if (y1 < 0) {
timer.cancel();
jButton2.setLocation(x, y);
timer.purge();
}
}
}, new Date(), počasi);
}
答案 0 :(得分:1)
首先看看How to use Swing Timers和Concurrency in Swing,了解有关如何使用Swing Timer
的详细信息以及为什么要这样做。
接下来,在您的课程中,创建一个timer
属性...
private Timer timer;
然后在构造函数中,创建Timer
...
timer = new Timer(5, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
y1 = y1 - 1;
if (y1 < 0) {
y1 = 0;
timer.stop();
}
jButton2.setLocation(x1, y1);
}
});
然后,当您需要时,启动timer
...
if (evt.getKeyCode() == KeyEvent.VK_SPACE) {
long počasi=10;
if (!timer.isRunning()) {
timer.start();
}
}
接下来,请阅读How to Use Key Bindings,这将解决KeyListener
的所有问题,尤其是如果您有其他可以获得键盘焦点的控件
另外,请记住,组件动画很难。如果您的容器有布局管理器,那么您将与之抗争