我正在尝试将“剩余时间”附近的整数减1,然后每秒重新绘制,但我只能在不断调整窗口大小时看到更改。我已经在Windows和Ububtu 11.10命令行的Jcreator 3中尝试了这个,但它仍然无效。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import javax.imageio.*;
class StatusPanel extends JPanel implements ActionListener {
int time = 60;
int round = 1;
Timer timer;
public StatusPanel() {
this.timer = new Timer(1000, this);
this.timer.start();
this.setVisible(true);
this.setDoubleBuffered(true);
}
public void updateTime() {
if (time > 0) {
time--;
}
}
public void paint(Graphics page) {
super.paint(page);
page.setFont(new Font("TimesRoman", Font.PLAIN, 30));
String sTime = String.valueOf(time);
String sRound = String.valueOf(round);
page.setColor(Color.WHITE);
page.drawString(sTime, 253, 149);
page.drawString(sRound, 230, 105);
}
public void actionPerformed(ActionEvent event) {
this.updateTime();
}
}
答案 0 :(得分:1)
public void updateTime(){
if (time>0) time--;
}
更改time
后,应重新绘制组件。但是,Swing通常将组件视为静态对象,并且不会连续重绘它们。您需要告诉Swing您希望重新绘制组件:
public void updateTime(){
if (time>0){
time--;
this.repaint();
}
}
另一方面,也许你应该在达到零时停止你的计时器。似乎不再使用了。