import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import javax.swing.JApplet; /* */ public class GuruguruDoubleBuffered extends JApplet implements Runnable { int r = 50, x = 110, y = 70; double theta = 0; // 角度 Thread thread = null; Dimension size; Image offScreen; Graphics gOff; @Override public void init() { size = getSize(); offScreen = createImage(size.width, size.height); // オフスクリーンイメージ gOff = offScreen.getGraphics(); // offScreen に描画するための Graphics } // 以下のような paint のオーバーライドが必要と書かれている参考資料も多いが、 // 少なくとも現バージョンの Java ライブラリでは必要ない // @Override // public void update(Graphics g) { // paint(g); // } @Override public void paint(Graphics g) { // super.paint(g); // これをするとちらつく gOff.clearRect(0, 0, size.width, size.height); // オフスクリーンイメージを一旦消去 gOff.drawString("Hello, World!", x, y); // オフスクリーンに描画 g.drawImage(offScreen, 0, 0, this); // オフスクリーンイメージを画面にコピー } @Override public void start() { if (thread == null) { // 念のためチェック thread = new Thread(this); thread.start(); } } @Override public void stop() { thread = null; } public void run() { Thread thisThread = Thread.currentThread(); for (; thread == thisThread; theta+=0.02) { x = 60+(int)(r*Math.cos(theta)); y = 70-(int)(r*Math.sin(theta)); repaint(); // paintを間接的に呼出す try { Thread.sleep(10); // 10 ミリ秒お休み } catch (InterruptedException e) {} } } }