我正在考虑在我制作的游戏中加入一个进度条,倒计时从5到20之间的随机数开始,直到0。这是我的代码:
``` package Software; ```
我知道大部分内容都是错误的,我只是想不出如何解决。它不能使用JProgressBar,而是要使用图形(一个绿色的矩形),在时间倒计时时越来越小。我该如何使屏幕可以调整大小,而进度条仍然相对于屏幕大小进行倒计时。这样它就不是固定大小,而是横跨屏幕底部。
``` package Software; ```
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class CountDownProgressBar extends JPanel {
RandomValues randomNum;
int timeValue;
Timer timer;
int length, newLength;
public CountDownProgressBar() {
timer = new Timer(24, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = timeValue; i > 0; --i) {
newLength = length - (length / timeValue);
length = newLength;
repaint();
}
}
});
randomNum = new RandomValues();
this.timeValue = 0;
this.setBackground(Color.GRAY);
}
@Override
public void paint(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(0, 0, length, 50);
}
public void setTimeLength() {
this.timeValue = randomNum.integer(5, 20);
}
public int getTimeLength() {
return this.timeValue;
}
}
我知道大部分内容都是错误的,我只是想不出如何解决。它不能使用JProgressBar,而是要使用图形(一个绿色的矩形),在时间倒计时时越来越小。我该如何使屏幕可以调整大小,而进度条仍然相对于屏幕大小进行倒计时。这样它就不是固定大小,而是横跨屏幕底部。
JProgressBar
绘制到Graphics
实例上。 2)不要阻塞EDT(事件派发线程),否则GUI会“冻结”。 请使用Swing Timer来执行重复任务,而不是调用Thread.sleep(n)
。有关更多详细信息,请参见Swing中的并发性。 3)“沿屏幕底部移动。” 将JProgressBar
放在BorderLayout
的PAGE_END
(即底部)中,而不是覆盖游戏播放区域。 - Andrew Thompson