java - Java Swing Timer 使用方法
问题描述
我基本上希望它按“空格”来启动计时器,然后在某个 Y 坐标点后停止它,然后在按下“空格”键时重新开始,如果这样的话。目前它并没有真正起作用,它只是完全停止而不是“清除”,所以我有点迷失了。如果你们中有人对此有任何想法,请分享!
我一直在想,我可能需要一个我以前从未做过的计时器的字符串,所以任何帮助或文章链接都会有所帮助
这是 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);
}
解决方案
首先查看如何在 Swing 中使用 Swing 计时器和并发,以了解有关如何使用 SwingTimer
以及为什么要使用 Swing 的详细信息。
接下来,在您的班级中,创建一个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();
}
}
接下来,阅读如何使用键绑定,这将解决所有问题KeyListener
,特别是如果您有其他可以获得键盘焦点的控件
另外,请记住,组件动画很困难。如果您的容器有一个布局管理器,您将与之抗争
推荐阅读
- php - 不在php页面中显示员工姓名和日期
- python - Fuzzy Match columns of Different Dataframe
- javascript - Angular 5 应用无法在 Microsoft Edge 40 中运行
- f# - 如何在 f# 中有效地构造数据
- android - 未找到 Android sdkmanager 工具
- google-chrome-devtools - 有什么办法可以保存内容
- reactjs - 在material-ui的主题配置中直接支持渐变
- android - 如何在列表 Android 中动态显示 lat long 的屏幕截图?
- angular6 - Angular 6 无法编译并出现服务错误
- java - 比较不同文件(CSV、Excel)中两列的日期 Java Apache commons 和 poi 以了解日期的相似之处