2017-07-23 18 views
-1

以下代碼是狗經歷一個運行週期的動畫的開始。我試圖用Timer和TimerTask和paintComponent製作動畫;爲什麼當定時器整數== 2時出現圖像

當secondsPassed整數變量等於2時,我希望布爾變量first(代表第一個圖像)變爲true,然後調用repaint()使該類繪製第一個圖像。但由於某種原因,它不起作用。

我想不通爲什麼它不會繪製圖像...

套餐:

package Animation; 

進口:

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.Timer; 
import java.util.TimerTask; 

說明:

/** 
* Created by Andrea on 7/23/2017. 
*/ 

類和繼承:

public class RunningDog extends JPanel { 

字段:

private static JPanel p; 
    private TimerTask task; 
    private Timer timer; 
    private int delay = 1000; 
    private int period = 1000; 
    private int secondsPassed = 0; 
    private boolean first = false; 
    private boolean second = false; 

    private BufferedImage imageFirst; 
    private BufferedImage imageSecond; 

啓動定時器:

public void go(){ 
     timer.scheduleAtFixedRate(task, delay, period); 
    } 

構造,設置了背景和圖像並促進計時器:

public RunningDog(){ 
     setBackground(Color.WHITE); 

     try{ 
      imageFirst = ImageIO.read(new File("C:\\Users\\Andrea\\Desktop\\First.png")); 
      imageSecond = ImageIO.read(new File("C:\\Users\\Andrea\\Desktop\\First.png")); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 


     timer = new Timer(); 
     task = new TimerTask(){ 
      @Override 
      public void run() 
      { 
       secondsPassed++; 
       System.out.println(secondsPassed); 
       if(secondsPassed == 2){ 
        first = true; 
        repaint(); 
       } 
      } 
     }; 
    } 

塗料組件,用於繪圖:

@Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if(first){ 
      g.drawImage(imageFirst, 0, 0, this); 
     } 
    } 

與啓動計時器,並創建JFrame中的類的實例主要方法:

public static void main(String[] args){ 
     RunningDog r = new RunningDog(); 
     r.go(); 

     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(300, 300); 
     f.add(new RunningDog()); 
     f.setVisible(true); 
    } 
} 
+1

使用調試器,你會看到什麼是錯的。首先檢查計時器是否變爲2秒。 – MiOnIs

回答

0

RunningDog實例要添加到JFrame已經不叫go()。請添加您製作的對象:r

RunningDog r = new RunningDog(); 
r.go(); 

JFrame f = new JFrame(); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.setSize(300, 300); 
f.add(r); // change this line 
f.setVisible(true); 
+0

非常感謝你@arthur:D –

相關問題