2013-03-23 24 views
1

我試圖讓「左剩餘時間」的整數遞減1並重新繪製每秒但我只能看到更改時調整不斷的窗口。我已經在Jcreator 3中在Windows和Ububtu 11.10命令行中嘗試了這一點,但它仍然不起作用。如果不重新調整應用程序窗口,Java窗口將不會更新

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

從'updateTime'調用'repaint' – 2013-03-23 07:44:12

+0

Yesss !!!!!謝謝。你一定已經猜到了,我仍然是java的noob。再次謝謝你! :) – 2013-03-23 07:48:16

+0

坦率地說,我很驚訝,我沒有找到重複的問題。無論如何,看到這個:http://stackoverflow.com/questions/10768619/paint-and-repaint-in-java?rq=1 – 2013-03-23 07:54:53

回答

1
public void updateTime(){ 
    if (time>0) time--; 
} 

time改變時,你的組件時,應重繪。但是,Swing通常將組件視爲靜態對象,並且不會連續重繪它們。你需要告訴揮杆,你希望你的組件粉刷:

public void updateTime(){ 
    if (time>0){ 
     time--; 
     this.repaint(); 
    } 
} 

在一個側面說明,或許當你達到零,你應該停止計時器。它似乎不再使用。