2013-04-28 56 views
0

我有以下代碼:Java小程序 - 重繪

import java.awt.*; 
import java.applet.*; 

public class DrawExample extends Applet 
{ 
    Font bigFont; 

    Color redColor; 
    Color weirdColor; 
    Color bgColor; 

    public void init() 
    { 
      bigFont = new Font("Arial",Font.BOLD,16); 
      redColor = Color.red; 
      weirdColor = new Color(60,60,122); 
      bgColor = Color.yellow; 
     setBackground(bgColor); 
    } 

    public void stop() 
    { 
    } 

    public void paint(Graphics g) 
    { 
     g.setFont(bigFont); 
     g.drawString("TESTING",80,20); 
     g.setColor(Color.black); 
     g.drawRect(100,100,100,100); 
     g.fillRect(110,110,80,80); 
     g.setColor(weirdColor); 
     g.fillArc(120,120,60,60,0,360); 
     g.setColor(Color.yellow); 
     g.drawLine(140,140,160,160); 
     g.setColor(Color.black); 
    } 
} 

我不知道如何「重繪」輸出我得到..可以說,我想小程序來啓動和後3秒我要重繪「圖片」,使背景顏色變成紅色(或其他)。我怎麼做?我如何在3秒內更改輸出?

+0

順便說一句 - 不要在這個時代使用AWT組件。那些使用它的人很大程度上已經忘記了細節。 – 2013-04-29 16:01:49

回答

0

paint方法開始補充一點:

super.paint(g); 
0

答案是你的標題,嘗試調用repaint() method。您可以使用TimerTask執行repaint()方法每3秒/

例子:

boolean colourIsRed = false; 
int delay = 1000; //1 second 
int period = 3000; //3 seconds 

Timer timer = new Timer(); 

timer.scheduleAtFixedRate(new TimerTask() { 
    public void run() { 
    if (colourIsRed) { 
     setBackground(Color.blue); 
     colourIsRed = false; 
    } 
    else { 
     setBackground(Color.red); 
     colourIsRed = true; 
    }   

    repaint(); 
    } 
}, delay, period); 
+1

'TimerTask'不符合Swing的單線程要求,計時器的每個tick都在Event Dispatching Thread之外執行。你應該使用'javax.swing.Timer'。此外,OP的油漆不好 – MadProgrammer 2013-04-28 23:42:16

+0

OP使用的是AWT,單線程的要求是否適用於此? – user0 2013-04-28 23:54:33

+0

好的問題,據我所知AWT組件是線程安全的:( – MadProgrammer 2013-04-29 00:04:17