爲什麼我調用repaint()方法後,我的java.awt.Window沒有重繪?如何重新繪製java.awt.Window?
public class Counter extends Window implements ActionListener {
private static final long serialVersionUID = 1L;
private Timer timer;
private int time;
public Counter() {
super(null);
setAlwaysOnTop(true);
setBounds(getGraphicsConfiguration().getBounds());
setBackground(new Color(0, true));
setVisible(true);
timer = new Timer(1000, this);
timer.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.clearRect(0, 0, getWidth(), getHeight());
g.setColor(Color.RED);
g.drawString(String.valueOf(time), getWidth()/2, getHeight()/2);
}
@Override
public void update(Graphics g) {
super.update(g);
}
@Override
public void actionPerformed(ActionEvent e) {
time++;
repaint();
}
正如你所看到的,我創建了一個延遲1秒的計時器。之後,我打電話repaint()在屏幕上繪製計數器的號碼。但它只在我的屏幕上繪製一個零點,然後停止繪製(零點停留在屏幕上)。首先,我認爲paint方法只被調用一次,但我測試了一個System.out.prinln(),並且證明paint方法每秒執行一次,所以它實際上應該重新繪製窗口...所以我不知道在哪裏我犯了一個錯誤。
是的,我打算使用awt.Window,而不是一個JFrame或逐幀等。
確定你的actionperformed方法被調用?在你的println()裏面的油漆中打印你的時間變量,以確保它正在被更新。 –
@GordonAllocman是的先生,actionperformed被調用,我測試了它,時間也在計數0,1,2,3 .... – AvarionDE
明確調用該組件的「無效」方法。這迫使重繪,因爲整個包含器無效(並強制重新佈局組件)。 – Jorge