2012-12-28 75 views
2
import java.applet.*; 
import java.awt.*;  // Graphics, Shape 
import java.awt.geom.*; //Graphics2D 
/* 
<applet code = Oval1.class height=300 width=300 > 
</applet> 
*/ 
public class Oval1 extends Applet implements Runnable { 
    Shape circle; 
    Color c; 
    public void init() { 
     circle = new Ellipse2D.Float(90,100, 90, 90); 
     repaint(); 
     Thread th = new Thread(this); 
     th.start(); 
    } 
    public void run() { 
     try { 
      while(true) { 
       System.out.println(1); 
       c = Color.cyan; 
       repaint(); 
       Thread.sleep(1000); 
       System.out.println(2); 
       c = Color.gray; 
       repaint(); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
    public void update(Graphics g) { 
     paint(g); 
    } 
    public void paint(Graphics g) { 
     Graphics2D d = (Graphics2D) g; 
     d.setColor(c); 
     d.fill(circle); 
    } 
} 

我試圖創建具有改變圓圈的顏色每秒鐘小程序&的中間實心圓一個小程序,意味着我要秀像圓它閃爍。如何改變圓的顏色在每一秒

我想在每秒鐘更改圓圈的顏色。

爲此我使用Shape類&線程,但它仍然無法工作。

我已經用paint(g)通過重載update方法試試..

這會不會效果還

+0

您是否獲取了System.out.println輸出? – Thilo

+0

是的,在控制檯中,我在每一秒都得到了println語句... –

+1

c改變了它的顏色,但是你沒有看到它。添加Thread.sleep(1000);在repaint()之後的while塊的末尾;你會得到你想要的。 – 2012-12-28 07:26:04

回答

3

第二次repaint()後添加Thread.sleep(1000)。

 while(true) { 

      System.out.println(1); 
      c = Color.cyan; 
      repaint(); 
      Thread.sleep(1000); 
      System.out.println(2); 
      c = Color.gray; 
      repaint(); 
      Thread.sleep(1000); 
     } 
+0

謝謝......現在就完成了。 ... –

2

可以替代的Thread.sleep的使用Java定時器()。例如使用Timer,http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html。 Thread.sleep()阻止applet的繪製方法。

+0

我必須使用線程,因爲這是我的學校作業,由我的教授提供的定義... –

+0

您可以使用Timer類完成我的示例,因爲我不知道使用Timer類的swing? –

+0

您可以看看http://en.wikiversity.org/wiki/Java_applets或http://www.leepoint.net/notes-java/other/10time/20timer.html – umert

1

試試這個..

只需要把了Thread.sleep(1000);第二次重繪後(),當前第二次重繪後立即第一次重繪調用,所以它結束第二次繪製repaint();

import java.applet.*; 
import java.awt.*;  // Graphics, Shape 
import java.awt.geom.*; //Graphics2D 
/* 
<applet code = Oval1.class height=300 width=300 > 
</applet> 
*/ 
public class Oval1 extends Applet implements Runnable { 
    Shape circle; 
    Color c; 
    public void init() { 
     circle = new Ellipse2D.Float(90,100, 90, 90); 
     repaint(); 
     Thread th = new Thread(this); 
     th.start(); 
    } 
    public void run() { 
     try { 
      while(true) { 
       System.out.println(1); 
       c = Color.cyan; 
       repaint(); 
       Thread.sleep(1000); 
       System.out.println(2); 
       c = Color.gray; 
       repaint(); 
       Thread.sleep(1000); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
    public void update(Graphics g) { 
     paint(g); 
    } 
    public void paint(Graphics g) { 
     Graphics2D d = (Graphics2D) g; 
     d.setColor(c); 
     d.fill(circle); 
    } 
}