我现在正在编写我的第一个Java游戏的代码,到目前为止我已经构建了GUI并且我想添加一些逻辑。在我的游戏中,用户应该看到他移动的时间(从10秒开始),如10,9,8,7,6,5,4,3,2,1,0。我创建了JLabel并希望显示把时间花在了它上面。我的程序有3个难度级别,首先用户通过点击适当的JButton选择一个,然后用户应该看到计时器和一些选项和播放选项。我该如何应对这个问题?我在Java中读到了Timer类,但仍然不知道如何在JLabel上显示倒计时时间。也许我应该实现一个游戏循环,但说实话,我不知道如何制作它。
答案 0 :(得分:0)
你可以简单地使用倒数计时器方法并将你的JLabel传递给它,同时计算倒计时秒数和可选的“时间结束”'消息。
互联网上有很多关于此类事情的例子,但这是我的快速演绎:
public static Timer CountdownTimer(JLabel comp, int secondsDuration, String... endOfTimeMessage) {
if (secondsDuration == 0) { return null; }
String endMsg = "~nothing~";
if (endOfTimeMessage.length>0) { endMsg = endOfTimeMessage[0]; }
final String eMsg = endMsg;
int seconds = secondsDuration;
final long duration = seconds * 1000;
JLabel label = (JLabel)comp;
final Timer timer = new Timer(10, new ActionListener() {
long startTime = -1;
@Override
public void actionPerformed(ActionEvent event) {
if (startTime < 0) {
startTime = System.currentTimeMillis();
}
long now = System.currentTimeMillis();
long clockTime = now - startTime;
if (clockTime >= duration) {
((Timer)event.getSource()).stop();
if (!eMsg.equals("~nothing~")) { label.setText(eMsg); }
return;
}
SimpleDateFormat df = new SimpleDateFormat("mm:ss:SSS");
label.setText(df.format(duration - clockTime));
}
});
timer.start();
return timer;
}
如果要更改JLabel中倒计时的显示方式,则可以更改 SimpleDateFormat 字符串。这个方法返回Timer对象,所以......你想方设法如何随时停止它(在持续时间到期之前)。