import javax swing import java awt public class
では早速、今日のサンプル①です import javax. swing. *; import java. awt. *; public class ex 6 extends JApplet implements Runnable { int x, y; Thread anime=null; public void init() { x=100; y=100; anime=new Thread(this); anime. start(); }
サンプル① public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); g. set. Color(Color. black); g. fill. Oval(x, y, 100); }
サンプル① public void run() { while (anime!=null) { x+=5; repaint(); if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説① import部 import javax. swing. *; import java. awt. *; 今回はこの2つをimportします。
解説① 宣言部 public class ex 6 extends JApplet implements Runnable { int x, y; Thread anime=null;
解説① 宣言部 public class ex 6 extends JApplet implements Runnable { int x, y; Thread anime=null; スレッドを使うときには 必ずrunnableをインプリメントします。
解説① 宣言部 public class ex 6 extends JApplet implements Runnable { int x, y; Thread anime=null; 整数型の変数x, yを宣言しておきます。
解説① init部 public void init() { x=100; y=100; anime=new Thread(this); anime. start(); }
解説① init部 public void init() { x=100; y=100; xとyの初期値をともに100にしておきます。 anime=new Thread(this); anime. start(); }
解説① init部 public void init() { x=100; y=100; anime=new Thread(this); anime. start(); } スレッドであるanimeを使える状況にします。
解説① paint部 public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); g. set. Color(Color. black); g. fill. Oval(x, y, 100); }
解説① paint部 public void paint(Graphics g) { g. set. Color(Color. white); 色を白に設定し、 g. fill. Rect(0, 0, 500); 画面を白く塗りつぶします。 g. set. Color(Color. black); g. fill. Oval(x, y, 100); }
解説① paint部 public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); g. set. Color(Color. black); 色を黒に設定して g. fill. Oval(x, y, 100); 塗りつぶした円を描きます }
解説① run部 public void run() { while (anime!=null) { x+=5; repaint(); if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説① run部 public void run() { while (anime!=null) { x+=5; repaint(); Xの値を 5増やします。 if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説① run部 public void run() { while (anime!=null) { x+=5; repaint(); paint部をもう一度実行します。 if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説① run部 public void run() { while (anime!=null) { x+=5; repaint(); if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } } もし、xが500を越えたら、 x=0にしてあげます。
解説① run部 public void run() { while (anime!=null) { x+=5; repaint(); if (x>500) {x=0; } try { Thread. sleep(100); ここはスリープの部分です。 Sleep(100)は0.1秒まつことを意味してます。 } catch (Interrupted. Exception e) {}; } }
いきなりサンプル②です。 import javax. swing. *; import java. awt. image. *; public class ex 7 extends JApplet implements Runnable { int x, y, flag; Thread anime=null; Image image 1, image 2, image 3, image 4;
いきなりサンプル②です。 public void init() { x=100; y=100; flag=0; image 1=get. Image(get. Code. Base(), "s 1. jpg"); image 2=get. Image(get. Code. Base(), "s 2. jpg"); image 3=get. Image(get. Code. Base(), "s 3. jpg"); image 4=get. Image(get. Code. Base(), "s 4. jpg"); anime=new Thread(this); anime. start(); }
いきなりサンプル②です。 public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); if ((flag % 4)==0) g. draw. Image(image 1, x, y, this); if ((flag % 4)==1) g. draw. Image(image 2, x, y, this); if ((flag % 4)==2) g. draw. Image(image 3, x, y, this); if ((flag % 4)==3) g. draw. Image(image 4, x, y, this); }
いきなりサンプル②です。 public void run() { while (anime!=null) { x+=5; flag+=1; repaint(); if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } } }
解説 サンプル② 宣言部 import javax. swing. *; import java. awt. image. *; public class ex 7 extends JApplet implements Runnable { int x, y, flag; Thread anime=null; Image image 1, image 2, image 3, image 4;
解説 サンプル② 宣言部 import javax. swing. *; 今回もこの3つをimportします import java. awt. *; import java. awt. image. *; public class ex 7 extends JApplet implements Runnable { int x, y, flag; Thread anime=null; Image image 1, image 2, image 3, image 4;
解説 サンプル② 宣言部 import javax. swing. *; import java. awt. image. *; 今回もスレッドを使うので、 このように書きます public class ex 7 extends JApplet implements Runnable { int x, y, flag; Thread anime=null; Image image 1, image 2, image 3, image 4;
解説 サンプル② 宣言部 import javax. swing. *; import java. awt. image. *; public class ex 7 extends JApplet implements Runnable { int x, y, flag; 変数x、y、flagを用意します Thread anime=null; Image image 1, image 2, image 3, image 4;
解説 サンプル② 宣言部 import javax. swing. *; import java. awt. image. *; public class ex 7 extends JApplet implements Runnable { int x, y, flag; Thread anime=null; スレッドはnullにしておきます Image image 1, image 2, image 3, image 4;
解説 サンプル② 宣言部 import javax. swing. *; import java. awt. image. *; public class ex 7 extends JApplet implements Runnable { int x, y, flag; Thread anime=null; Image image 1, image 2, image 3, image 4; 4枚のイメージを定義します
解説 サンプル② init部 public void init() { x=100; y=100; flag=0; image 1=get. Image(get. Code. Base(), "s 1. jpg"); image 2=get. Image(get. Code. Base(), "s 2. jpg"); image 3=get. Image(get. Code. Base(), "s 3. jpg"); image 4=get. Image(get. Code. Base(), "s 4. jpg"); anime=new Thread(this); anime. start(); }
解説 サンプル② init部 public void init() { x=100; y=100; flag=0; 初期値をこのようにします image 1=get. Image(get. Code. Base(), "s 1. jpg"); image 2=get. Image(get. Code. Base(), "s 2. jpg"); image 3=get. Image(get. Code. Base(), "s 3. jpg"); image 4=get. Image(get. Code. Base(), "s 4. jpg"); anime=new Thread(this); anime. start(); }
解説 サンプル② init部 public void init() { x=100; y=100; flag=0; image 1=get. Image(get. Code. Base(), "s 1. jpg"); image 2=get. Image(get. Code. Base(), "s 2. jpg"); image 3=get. Image(get. Code. Base(), "s 3. jpg"); image 4=get. Image(get. Code. Base(), "s 4. jpg"); anime=new Thread(this); anime. start(); } 4枚のイメージを読み込んでいる 部分です
解説 サンプル② init部 public void init() { x=100; y=100; flag=0; image 1=get. Image(get. Code. Base(), "s 1. jpg"); image 2=get. Image(get. Code. Base(), "s 2. jpg"); image 3=get. Image(get. Code. Base(), "s 3. jpg"); image 4=get. Image(get. Code. Base(), "s 4. jpg"); anime=new Thread(this); anime. start(); } スレッドを使える状況 にします
解説 サンプル② init部 public void init() { x=100; y=100; flag=0; image 1=get. Image(get. Code. Base(), "s 1. jpg"); image 2=get. Image(get. Code. Base(), "s 2. jpg"); image 3=get. Image(get. Code. Base(), "s 3. jpg"); image 4=get. Image(get. Code. Base(), "s 4. jpg"); anime=new Thread(this); スレッドを開始します anime. start(); ここでrun()の部分が 実行されます }
解説 サンプル② paint部 public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); if ((flag % 4)==0) g. draw. Image(image 1, x, y, this); if ((flag % 4)==1) g. draw. Image(image 2, x, y, this); if ((flag % 4)==2) g. draw. Image(image 3, x, y, this); if ((flag % 4)==3) g. draw. Image(image 4, x, y, this); }
解説 サンプル② paint部 public void paint(Graphics g) { g. set. Color(Color. white); 色を白に設定し g. fill. Rect(0, 0, 500); 画面を白で塗りつぶします if ((flag % 4)==0) g. draw. Image(image 1, x, y, this); if ((flag % 4)==1) g. draw. Image(image 2, x, y, this); if ((flag % 4)==2) g. draw. Image(image 3, x, y, this); if ((flag % 4)==3) g. draw. Image(image 4, x, y, this); }
解説 サンプル② paint部 public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); %は余り(mod)を意味します if ((flag % 4)==0) g. draw. Image(image 1, x, y, this); if ((flag % 4)==1) g. draw. Image(image 2, x, y, this); if ((flag % 4)==2) g. draw. Image(image 3, x, y, this); if ((flag % 4)==3) g. draw. Image(image 4, x, y, this); }
解説 サンプル② paint部 public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); ここは、イメージを画面に描く ところです if ((flag % 4)==0) g. draw. Image(image 1, x, y, this); if ((flag % 4)==1) g. draw. Image(image 2, x, y, this); if ((flag % 4)==2) g. draw. Image(image 3, x, y, this); if ((flag % 4)==3) g. draw. Image(image 4, x, y, this); }
解説 サンプル② paint部 public void paint(Graphics g) { g. set. Color(Color. white); g. fill. Rect(0, 0, 500); Flagに応じて描かせたいイメージ を描きます if ((flag % 4)==0) g. draw. Image(image 1, x, y, this); if ((flag % 4)==1) g. draw. Image(image 2, x, y, this); if ((flag % 4)==2) g. draw. Image(image 3, x, y, this); if ((flag % 4)==3) g. draw. Image(image 4, x, y, this); }
解説 サンプル② run部 public void run() { while (anime!=null) { x+=5; flag+=1; repaint(); if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説 サンプル② run部 public void run() { while (anime!=null) { x+=5; flag+=1; repaint(); サンプル①と同様無限ループ if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説 サンプル② run部 public void run() { while (anime!=null) { x+=5; flag+=1; repaint(); if (x>500) {x=0; } try Xの値を5増やし Flagの値を1増やします { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説 サンプル② run部 public void run() { while (anime!=null) { x+=5; flag+=1; repaint(); Paintの部分を実行します if (x>500) {x=0; } try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説 サンプル② run部 public void run() { while (anime!=null) { x+=5; flag+=1; repaint(); if (x>500) {x=0; } try { Thread. sleep(100); 0.1秒のwaitをかけます } catch (Interrupted. Exception e) {}; } }
では最後のサンプル③です。 import javax. swing. *; import java. awt. image. *; public class ex 8 extends JApplet implements Runnable { double t, delta_t; Thread anime=null; Image image 1;
では最後のサンプル③です。 public void init() { t=0. 001; delta_t=0. 002; image 1=create. Image(500, 500); anime=new Thread(this); anime. start(); }
では最後のサンプル③です。 public void paint(Graphics g) { g. draw. Image(image 1, 0, 0, this); }
では最後のサンプル③です。 public void run() { while (anime!=null) { t+=delta_t; graphwokaku(); repaint(); try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
では最後のサンプル③です。 public void graphwokaku() { double x, x 1, y 1, x 3, y 3; int x 2, y 2, x 4, y 4; Graphics g=image 1. get. Graphics(); g. set. Color(Color. white); g. fill. Rect(0, 0, 500); g. set. Color(Color. black);
では最後のサンプル③です。 for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); y 2=(int)(400 -250*y 1); x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } }
解説 サンプル③ 宣言部 import javax. swing. *; import java. awt. image. *; public class ex 8 extends JApplet implements Runnable { double t, delta_t; Thread anime=null; Image image 1;
解説 サンプル③ 宣言部 import javax. swing. *; import java. awt. *; 先ほどと同じです import java. awt. image. *; public class ex 8 extends JApplet implements Runnable { double t, delta_t; Thread anime=null; Image image 1;
解説 サンプル③ 宣言部 import javax. swing. *; import java. awt. image. *; public class ex 8 extends JApplet implements Runnable { double t, delta_t; 変数tは時間を Thread anime=null; 変数delta_tは時間の変化量とします Image image 1;
解説 サンプル③ init部 public void init() { t=0. 001; delta_t=0. 002; image 1=create. Image(500, 500); anime=new Thread(this); anime. start(); }
解説 サンプル③ init部 public void init() { t=0. 001; 初期の時間を0.001とし delta_t=0. 002; 時間の変化量を0.002とします。 image 1=create. Image(500, 500); anime=new Thread(this); anime. start(); }
解説 サンプル③ init部 public void init() { t=0. 001; delta_t=0. 002; image 1=create. Image(500, 500); anime=new Thread(this); anime. start(); } Image1を 500×500のサイズで 生成します
解説 サンプル③ init部 public void init() { t=0. 001; delta_t=0. 002; image 1=create. Image(500, 500); anime=new Thread(this); スレッドを生成し anime. start(); 開始します。 }
解説 サンプル③ paint部 public void paint(Graphics g) { g. draw. Image(image 1, 0, 0, this); }
解説 サンプル③ run部 public void run() { while (anime!=null) { t+=delta_t; graphwokaku(); repaint(); try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説 サンプル③ run部 public void run() { while (anime!=null) { t+=delta_t; graphwokaku(); repaint(); try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } } 無限ループ
解説 サンプル③ run部 public void run() { while (anime!=null) { t+=delta_t; 時間をdelta_tだけ増やします。 graphwokaku(); repaint(); try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説 サンプル③ run部 public void run() { while (anime!=null) { t+=delta_t; graphwokaku(); この中身はまた後で説明します。 repaint(); try { Thread. sleep(100); } catch (Interrupted. Exception e) {}; } }
解説 サンプル③ run部 public void run() { while (anime!=null) { t+=delta_t; graphwokaku(); repaint(); try { Thread. sleep(100); 画面を描き、0.1秒waitします } catch (Interrupted. Exception e) {}; } }
解説 サンプル③ グラフを描く public void graphwokaku() { double x, x 1, y 1, x 3, y 3; int x 2, y 2, x 4, y 4; Graphics g=image 1. get. Graphics(); g. set. Color(Color. white); g. fill. Rect(0, 0, 500); g. set. Color(Color. black);
解説 サンプル③ グラフを描く public void graphwokaku() { double x, x 1, y 1, x 3, y 3; 変数を用意します int x 2, y 2, x 4, y 4; Graphics g=image 1. get. Graphics(); g. set. Color(Color. white); g. fill. Rect(0, 0, 500); g. set. Color(Color. black);
解説 サンプル③ グラフを描く public void graphwokaku() { double x, x 1, y 1, x 3, y 3; ここの意味はムズカシイですね int x 2, y 2, x 4, y 4; これから絵を描くのをimageにします。 Graphics g=image 1. get. Graphics(); g. set. Color(Color. white); g. fill. Rect(0, 0, 500); g. set. Color(Color. black);
解説 サンプル③ グラフを描く public void graphwokaku() { double x, x 1, y 1, x 3, y 3; int x 2, y 2, x 4, y 4; Graphics g=image 1. get. Graphics(); g. set. Color(Color. white); 色を白にして塗りつぶし g. fill. Rect(0, 0, 500); 色を黒に変える。 g. set. Color(Color. black);
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); y 2=(int)(400 -250*y 1); x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } }
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); 数学関数です y 2=(int)(400 -250*y 1); Expは指数関数(自然対数の) x 3=x+0. 01; Sqrtは√を表します。 y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } }
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); 描かせたいxの範囲をー1≦x≦1 y 2=(int)(400 -250*y 1); とします。 x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } }
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); まずxのときのyの値を求める y 2=(int)(400 -250*y 1); x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } }
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); 数学の座標x1とy1を y 2=(int)(400 -250*y 1); パソコンの座標に直します。 x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } }
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); y 2=(int)(400 -250*y 1); Xを少しずらしyを求めます。 x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } }
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); y 2=(int)(400 -250*y 1); x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } X3とy3をパソコンの座標に直します }
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); y 2=(int)(400 -250*y 1); x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } } (x2、y2)から(x4、y4)に 線を引きます
解説 サンプル③ グラフを描く for (x=-1; x<1; x+=0. 01) { x 1=x; y 1=Math. exp(-x 1*x 1/4/t)/(2*Math. sqrt(t*Math. PI)); x 2=(int)(250*x 1+250); y 2=(int)(400 -250*y 1); x 3=x+0. 01; y 3=Math. exp(-x 3*x 3/4/t)/(2*Math. sqrt(t*Math. PI)); x 4=(int)(250*x 3+250); y 4=(int)(400 -250*y 3); g. draw. Line(x 2, y 2, x 4, y 4); g. dispose(); } } 説明が難しいですが、メモリのために グラフィックスオブジェクトを廃棄します。
- Slides: 92