以下代碼是狗經歷一個運行週期的動畫的開始。我試圖用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);
}
}
使用調試器,你會看到什麼是錯的。首先檢查計時器是否變爲2秒。 – MiOnIs