2013-11-20 117 views
0

我遇到了問題,創建了我的Java框架應用程序。 我無法在循環中調用重繪組件; 這是莫類的部分:學習如何使用的paintComponent方法使用JFrame創建動畫

if(e.getSource()==drop){ 
    //check if the row has space 
    if(currentGame.isFull(choosePosition)){ 
     return; 
     } 
    else{ 
     int row = currentGame.placeFigure(choosePosition, turn); 

     ImageIcon temp; 
     if(turn) 
      temp = firstIcon; 
     else 
      temp = secondIcon; 
     for(int i = 0; i != row + 1; ++i){ 
      cells[i][choosePosition].setIcon(temp); 
      if(i != 0) 
       cells[i - 1][choosePosition].setIcon(emptyIcon); 
      gameBoardPanel.repaint(); 
      gameBoardPanel.revalidate(); 
      Graphics myGraphics = getGraphics(); 
      // Draw as appropriate using myGraphics 
      myGraphics.dispose(); 
      paint(myGraphics); 
      try { 
        Thread.sleep(500); 
       } catch (InterruptedException ie) { 
        //Handle exception 
        System.out.println("can't start animation"); 
       } 
     } 
     repaint(); 
    } 
} 
+1

不要在框架中創建動畫,而應該在「JPanel」或「BufferedImage」中創建動畫。 1)爲了更快得到更好的幫助,請發佈[SSCCE](http://sscce.org/)。 2)獲取圖像的一種方法是通過熱鏈接到[本答案](http://stackoverflow.com/a/19209651/418556)中看到的圖像。 –

+1

不要阻塞事件派發線程。相反,使用javax.swing.Timer – MadProgrammer

+1

另外,不要使用getGraphics(如果你這樣做,也不要處理它),這不是繪畫完成的方式。看看[執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/) – MadProgrammer

回答

-1

開始。以下是如何使用定時器:

public class your_class_name extends if_you_need_to_extend implments ActionListener 
{ 

//In the constructor... 

    Timer t = new Timer(milliseconds,this); 
    t.start(); 

//In the main class... 

@Override 
public void actionPerformed(ActionEvent e) 
{ 
    //animations here 
    repaint(); //calls paintComponent again 
} 

@Override 
public void paintComponent(Graphics g) 
{ 
    //default drawings here 
} 
}