| 拡大する,拡大縮小する放射楕円を描画。 スレッドを使い,描画位置のxy座標と,幅と高さを変化さすことで,拡大,縮小。 |
import java.applet.*;
import java.awt.*;
public class ja04d extends Applet implements Runnable
{
int xpos1,ypos1,xpos2,ypos2,xpos3,ypos3; //放射楕円の左上のxy座標
int r = 5; //円の半径
int cw,ch; //放射する楕円の幅と高さ
int n = 1; //拡大する放射楕円の,半径の増分
int m = 1; //拡大縮小する楕円の,半径の増分
boolean b = true;
Image of; //オフスクリーン用のイメージ
Graphics ofg; //オフスクリーン用のイメージのGraphicsオブジェクト
Thread td; //スレッド
public void init(){
setBackground(Color.white); //Appletの背景色を白色に設定
of = createImage(size().width,size().height); //オフスクリーン用のイメージの作成
ofg = of.getGraphics(); //オフスクリーン用のイメージのGraphicsオブジェクトを取得
}
public void paint(Graphics g){
ofg.setColor(this.getBackground()); //全体を背景色で塗り潰す
ofg.fillRect(0,0,size().width,size().height);
for(int i = 0;i < 10;i++){ //放射楕円(固定)
ofg.setColor(new Color(i * 15,i * 25,i * 5));
xpos1 = 70 - 7 * i; //楕円の左上のxy座標
ypos1 = 20 - 2 * i;
cw = 2 * (r + 7 * i); //放射楕円の幅
ch = 2 * (r + 2 * i); //放射楕円の高さ
ofg.drawOval(xpos1,ypos1,cw,ch); //オフスクリーンに描画
}
for(int i = 0;i < n;i++){ //0.3秒間隔で拡大する放射楕円
ofg.setColor(new Color(i * 19,i * 16,i * 3));
xpos2 = 100 - 7 * i; //楕円の左上のxy座標
ypos2 = 100 - 2 * i;
cw = 2 * (r + 7 * i); //放射楕円の幅
ch = 2 * (r + 2 * i); //放射楕円の高さ
ofg.drawOval(xpos2,ypos2,cw,ch); //オフスクリーンに描画
}
for(int i = 0;i < m;i++){ //0.3秒間隔で拡大縮小する放射楕円
//i*i/2 は,最大時に真円にすりための調整
ofg.setColor(new Color(i * 10,i * 18,i * 15));
xpos3 = 300 - i * i / 2; //楕円の左上のxy座標
ypos3 = 100 - 7 * i;
cw = 2 * (r + i * i / 2 ); //放射楕円の幅
ch = 2 * (r + 7 * i); //放射楕円の高さ
ofg.drawOval(xpos3,ypos3,cw,ch); //オフスクリーンに描画
}
g.drawImage(of,0,0,this); //オフスクリーンイメージを画面に描画
}
public void update(Graphics g){
paint(g);
}
public void start(){
if(td == null){
td = new Thread(this);
td.start();
}
}
public void run(){
while(true){
try{
n += 1; //拡大する楕円の増分
if(n > 15)n = 1; //一定以上になると,デフォルトの 1 に戻す
if(b)m += 1; //拡大する楕円の増分
if(m > 15)b = false; //一定以上になると,フラグを反転さす
if(!b)m -= 1; //縮小する楕円の減分
if(m < 1)b = true; //一定以下になると,フラグを反転さす
repaint();
Thread.sleep(300); //0.3秒間隔でスレッドを実行
}catch(InterruptedException e){stop();}
}
}
public void stop(){
if(td != null){
td.stop();
td = null;
}
}
}
末尾