1

すみません、java repaint 再三の質問をしてもいいですか、パックマンの口の開閉の動きを表現するためにドラフティングを繰り返し使っていると困ります。しかし、このプログラムは一度だけ動かない...誰かがこの問題を解決するのを手伝ってくれる...どうもありがとう!:D

以下のように私のコード:

package Strive;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

class CDrawF extends JFrame {
    CDrawF (){
        setTitle("繪製各式圖形");                       //JFrame interface
        setBounds(50, 50, 490, 260);        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        for(int i = 0; i<= 360; i++){              //repeatly 360 times
        repaint();
        g2.setColor(new Color(1.0f, 0.0f, 1.0f));               
        g2.fill(new Arc2D.Double(100, 100, 80, 80, 30, 300, Arc2D.PIE)); 
        //PacMan close mouth
        repaint();
        try{            //Delay setions
                Thread.sleep(1000);
             }catch(InterruptedException ex){}
        g2.fill(new Arc2D.Double(100, 100, 80, 80, 10, 340, Arc2D.PIE)); 
        //PacMan open mouth
        repaint();
        }
    }
}

public class NewClass {          //Main
    public static void main(String[] args){
        new CDrawF ();
    }
}
4

1 に答える 1

9

提案:

  • JFrame で直接描画しないでください
  • paint(...) メソッドで描画しないでください。
  • Thread.sleep(...)Swing イベント スレッドで呼び出さない
  • paint(...)特にorpaintComponent(...)メソッドで呼び出さないでください。
  • 代わりに、JPanel または JComponent の paintComponent(...) メソッドを描画します。
  • Java グラフィックスのチュートリアルを読んで、これらすべてを説明してください。
  • repaint()paint(...) または paintComponent(...) 内で呼び出さないでください
  • アニメーション ループにスイング タイマーを使用します。ここでも、チュートリアルがこれを行うのに役立ちます。
于 2013-03-03T07:10:17.307 に答える