Report#2(Java)

○ディスプレイ出力Javaアプレット ●講義資料のJavaアプレットを参考に、簡単なディスプレイ出力Javaアプレットを作成せよ。

【プログラムと実行結果】

test testアプレット
   import java.applet.Applet;
   import java.awt.*;
   import java.util.Random;
   
   public class test extends Applet {
   public void paint(Graphics g) {
   Random = new Random();
   for (int i = 1; i < 100; i++) {
   g.setColor(new Color(a.nextInt()));
   g.drawRect(200-i*2,100-i,i*4,i*2);
   g.drawOval(i,i,i,i);
   g.drawOval(400-i*2,i,i,i);
   
   }
   }
   }
   

↓↓↓↓↓↓

実行結果

NO.1 円円円円・・・
   import java.applet.Applet;
   import java.awt.*;
   import java.util.Random;
   
   public class repo2_1 extends Applet {
   public void paint(Graphics g) {
   //Graphicsメゾット
   
   Random a = new Random();
   //乱数を得る。
   
   for (int i = 0; i < 101; i++) {
   g.setColor(new Color(a.nextInt()));
   //色をランダムに指定。
   
   g.drawOval(200,i,i,i);
   g.drawOval(200-i,i,i,i);
   g.drawOval(200-i*2,i,i,i);
   g.drawOval(200+i,i,i,i);
   //"drawOval"は下で説明する。
   }
   }
   }
   

↓↓↓↓↓↓

実行結果

NO.2 花火?
   import java.applet.Applet;
   import java.awt.*;
   import java.util.Random;
   
   public class repo2_2 extends Applet {
   
   public void init() {
   //initメソッド
   
   setBackground(Color.black);
   //背景色を黒に指定する。
   
   }
   public void paint(Graphics g) {
   //Graphicsメソッド
   
   Random a = new Random();
   //ここで乱数を得る。
   
   for (int i = 0; i < 51; i++) {
   //0から50までループ
   
   g.setColor(new Color(a.nextInt()));
   //ランダムに色を指定する。
   
   g.drawLine(8*i,0, 200,300);
   g.drawLine(8*i,i, 200,300);
   g.drawLine(8*i,51-i, 200,300);
   //drawLineも下で説明する。
   
   int x = (int)(400 * a.nextDouble());
   int y = (int)(250 * a.nextDouble());
   int r = (int)(11 * a.nextDouble());
   
   g.fillOval(x-r,y-r,2*r,2*r);
   g.setColor(Color.blue);
   //setColorで青色に指定。
   
   g.fillRect(176,275,48,100);
   //fillRectも下で説明
   
   g.setColor(Color.red);
   g.setFont(new Font("Bertram LET", Font.ITALIC, 48));
   //setFontで書体フォントを"Bertram LET"に指定。斜体。48フォントに指定。
   
   g.drawString("HANABI?", 105,350);
   //drawStringで文字列を表示。
   }
   }
   }
   

↓↓↓↓↓↓

実行結果

NO.3 JavaJava
   import java.applet.Applet;
   import java.awt.*;
   import java.util.Random;
   
   public class repo2_3 extends Applet implements Runnable
   //アプレットのヘッダに implements Runnable を入れる
   {
   volatile Thread runner;    
   //スレッドのための Thread 型変数( ここではrunner )を用意する。
   
   public void start()
   //メソッド start() を用意してスレッドをスタートする。新しいスレッドを
   作って
   // Thread 型変数 runner に入れ、スレッド runner をスタートさせる。
   
   {
   if(runner == null){
   runner = new Thread(this);
   runner.start();
   //Threadが動いてなければ、開始する
   }
   }
   public void stop()
   //メソッド stop() を用意してスレッドを止める準備をする。
   {
   runner = null;
   //ここでstop()が呼ばれたら,変数runner = nullとなる。
   }
   
   public void run()
   //メソッド run() を用意してスレッドで実行する手順を記述する。
   //この部分がこのアプレットの本体になる。
   { 
   
   Thread run = Thread.currentThread();
   // 変数runに、現在起動しているThreadを読み込む。
   // この時、run != null となる。
   while(runner == run){
   repaint();
   pause(400);
   // stop()が呼ばれていたら、runner != run となり、
   // while文が一周した時に自然にThreadが停止する。
   }
   public void paint(Graphics g)
   {
   setBackground(Color.black);
   Random a = new Random();
   for (int i = 0; i < 8; i++) {
   g.setColor(new Color(a.nextInt()));
   // 乱数により、色をランダム設定する。
   int x = (int)(300 * a.nextDouble());
   int y = (int)(200 * a.nextDouble());
   int r = (int)(70 * a.nextDouble());
   g.setFont(new Font("Bertram LET", Font.ITALIC, r));
   //フォント,斜体,48ポイントを設定。
   g.drawString("Java", x, y*2);
   g.drawLine(x*4/3,0, 200,400);
   g.drawLine(y,0, 200,400);
   g.drawLine(400,y, 200,400);
   g.drawLine(0,y, 200,400);
   }
   }
   void pause(int time)
   {
   try {Thread.sleep(time);} 
   // timeミリ秒間スレッドを停止する。
   catch (InterruptedException e){}
   // 例外を無視する。
   }
   }
   

↓↓↓↓↓↓

実行結果

【考察】

●JavaアプレットをWWWのページに表示する●

○Javaアプレットを表示するには、HTMLファイルの中のアプレットを表示したい部分に、<APPLET></APPLET>タグを使って指定する。 (例)
<APPLET CODE="ファイル名.class" WIDTH=200 HEIGHT=100 >
</APPLET>
CODE="アプレットのクラスファイル名" WIDTH=アプレットの幅(ピクセル数) HEIGHT=アプレットの高さ(ピクセル数)

●パッケージについて●

○パッケージとは・・・ある特定の働きをするクラスを一つにまとめたもの。
・例えば、図形や画像を使用する時に使うGraphicsクラスや、乱数を発生させる時に 使うRandomクラス等。。
パッケージ名 パッケージの内容
java.applet アプレットを作成して実行するためのクラス。
java.lang 言語を使うためのクラス。Javaプログラム言語で重要なパッケージ。
(例)文字列を参照するためのStringクラスなど。
java.awt* 図形やイメージを使用するためのパッケージ。
*(Abstract Window Toolkit)
java.io 入出力を使用するときのパッケージ。
java.event イベント処理をするためのパッケージ。
java.util 乱数や日付と時刻の機構などを表示するときに使用されるパッケージ。
java.net ネットワークを使用するためのパッケージ。

●アプレットの図形について●

アプレットで描ける図形にはいろいろあったので調べてみた。

名前 内容
drawLine( x1, y1, x2, y2) 座標(x1, y1)と(x2, y2)の間を線で結ぶ。
drawRect( x, y, width, height) 座標(x, y)を基準にし、x軸(右)方向に幅 "width"ピクセル、y軸(下)方向に 高さ
"height"ピクセルの長方形(正方形)を描く。
fillRect( x, y, width, height) drawRectと同じく、座標(x, y)を基準にし、幅 "width"ピクセル、高さ "height"
ピクセルの長方形を描くが、ここでは囲まれた部分が塗りつぶされる。
drawOval( x, y, width, height) 座標(x, y)を基準にする、x軸(右)方向に幅 "width"ピクセル、y軸(下)方向に高さ
"height"ピクセルの長方形(正方形)に内接する楕円(円)を描く。
fillOval( x, y, width, height) drawOvalと同じく、座標(x, y)を基準にし、幅 "width"ピクセル、高さ"height"
ピクセルの長方形に内接する楕円(円)を描くが、ここでは囲まれた部分が塗りつぶされる。
drawArc( x, y, width, height,
角度1, 角度2)
drawOvalと同じく、座標(x, y)を基準にし、幅 "width"ピクセル、高さ"height"
ピクセルの長方形に内接する楕円(円)を描くが、ここでは扇形にする角度(角度1)と、
どれくらいの角度(角度2)の扇形にするかという部分を付け加える。円弧が描かれる。
fillArc( x, y, width, height,
角度1, 角度2)
drawArcで円弧だったのが塗りつぶされるので、扇形になる。
drawRoundRect( x, y, width,
height, arcwidth, archeight)
隅が円みを帯びた長方形を描く。普通の長方形と異なるのは、arcwidと tharcheight
で、前者を大きくすれば水平部分が丸みを帯び、後者を大きくすれば、水平 部分が丸みを
帯びる。よって両方大きくすれば円に近付く。
fillRoundRect( x, y, width,
height, arcwidth, archeight)
drawRoundRectと同じだが、中が塗りつぶされる。
drawPolygon( 配列1, 配列2, 点の数) 多角形が描かれる。配列を使い、配列1を配列2にそれぞれ対応する要素の座標を、
"点の数"で結んでいく。
fillPolygon( 配列1, 配列2, 点の数) drawPolygonと基本的には同じだが、中が塗りつぶされる。

●スレッドについて●

○スレッド・・・プログラム中の独立した制御の流れ。Javaは複数のスレッドを 独立に並行して
実行できるシステム。

・アプレットで文字や図形、画像を動かすアニメーションが作れる。 ・専用のスレッドを用意する必要がある。 ★今回はレポート2-No.3でスレッドを試してみました。(レポート2-No.3参照)

【参考文献・URL】

「新Java言語入門」ビギナー騙 著: 林 晴比古 SOFTBANK Publishing <Yet Another Java Laboratory> http://www.ipc.hokusei.ac.jp/~z00104/java/ <Java Animation> http://www.ipc.hokusei.ac.jp/~z00104/java/anim.html