// AnimationCar.java //<APPLET code="AnimationCar.class" // width=220 height=120> //</APPLET> import java.awt.*; import java.applet.*; public class AnimationCar extends Applet implements Runnable { private Thread trig = null; private int x; public void start() { if (trig == null) { trig = new Thread(this); trig.start(); } } public void init() {x = 200; } public void run() { while (trig != null) { repaint(); try { Thread.sleep(125); } catch (Exception e) { showStatus("Error: " + e); } x -= 5; if (x == 0) x = 200; } } public void paint(Graphics g) { g.drawRect(x+50,40,150,30); g.fillOval(x+80,70,20,20); g.fillOval(x+150,70,20,20); g.drawLine(x+80,40,x+120,10); g.drawLine(x+120,10,x+170,10); g.drawLine(x+170,10,x+190,40); g.drawString("Hello",x+120,60); } }ここでの例では,Appletクラスを継承したユーザクラスに さらに,Runnableインタフェースを実装させることでアニメーションを実現して いる. アプレットは,init,start, paintのメソッドを順に呼び出す. Runnableインタフェースをもつ場合,startのメソッドの中で threadを生成し,そのthreadを起動すれば,そのthreadの中の runメソッドが並行処理される.runの中では, repaintメソッドが呼び出されるようにする. repaintメソッドは, 画面をクリアーし,paintメソッドを 呼ぶupdateメソッドを呼び出している. updateメソッドを定義しておかなければ ユーザは,paintメソッド に表示したい手続きを書いておけば, 画面をpaintごとに消した後 表示を行う.