1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース)

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
Ver 準備 Java フォルダに移動して …… mkdir Swing Swing フォルダに移動して …… cp ~gundam/Java/Swing. コマンドプロンプト ( JDK ) でないと起動 しないので注意!!!
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
Imageの描画 画像を読み込んで表示すること。 import java.awt.*;が必要。
Applet 岡部 祐典 鈴木 敬幸.
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
JAVA GUIプログラミング 第6回 TextFieldとLabel.
オブジェクト指向言語 第12回 アプレット.
JAVA GUIプログラミング 第1回 JAVAの実行 絵を描こう.
アプレット (Applet)について.
Iアプリプログラミング その1  鳥居秀徳.
アルゴリズムとプログラミング (Algorithms and Programming)
Javaでゲーム  山本拓弥.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
JAVA.
JavaServlet&JSP入門 01K0018 中村太一.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
 Applet アプレット ◇長い長いアプレット講座◇.
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
プログラミングIII演習 第1回目.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
アプレット プログラミング 第10回 アプレット プログラミング第10回.
RMI ソフトウェア特論 第6回 /
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
Java入門 13.5カラーの使用 13.6テキストの表示                  2003/12/12                   紺野憲一.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
TCanvas BCB:TCanvasクラスでグラフィックを扱う。 TFormなどもプロパティとして持っている。
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
JAVA入門後期③ JAVAのGUI (JavaのGUI基本構造、いろいろなアプレット)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
JAVA入門後期④ イベント、AWT、の基本構造、スレッド
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング実習(Java) グラフィクス処理とGUIプログラミング 講師:坂口 利裕(横浜市立大学)
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
5-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース) 情報処理学会九州支部講習会 「インターネット最前線」 Java プログラミング-入門編- 九州工業大学情報科学センター 山之上 卓 1999 年 2 月 9 日 1.Java 概要 2.簡単なアプレット 3.動画を表示するアプレット 4.アプレットの改良 5.開発環境の利用(データベース)

1.Java 概要 1-1 特徴 1-2 Java 開発キット JDK 1-3 アプレットとアプリケーション 1-4 オブジェクト指向とイベント駆動

1-1 特徴 ネットワーク オブジェクト指向 どこでも動く(?), Java VM(仮想マシン) シンプル(>C++), 現実的(>SmallTalk) Thread … concurrent programming可 GC セキュリティー

1-2 Java 開発キット JDK SUN (Java の開発元) が無料で提供, Web や雑誌などで手に入る. javac … Java コンパイラ java … アプリケーション実行 appletviewer … アップレット実行 jar … Java アーカイブ(jar)操作 その他

1-3 アプレットとアプリケーション アプレットは WWW ブラウザの上で動くプログラム. アプリケーションは通常のプログラム. セキュリティのため、様々な制限あり アプリケーションは通常のプログラム. アプリケーションでネットワークプログラミング も可能 ex. HotJava. アプリケーションのコンパイルと実行 アプレットのコンパイルと実行

アプリケーションのコンパイルと実行 プログラム例, コンパイル, 実行 % cat Hello.java public class Hello { static public void main(String argv[]){ System.out.println("hello world."); } % javac Hello.java Hello.class ができる. % java Hello hello world. %

アプレットのコンパイルと実行 プログラム例 Hello1.java: import java.awt.*; import java.applet.*; public class Hello1 extends java.applet.Applet{ public void paint(Graphics g){ g.drawString("HelloWorld",10,20); }

html 例 applet.html: <applet code="Hello1.class" width=100 height=50> </applet> アプレット描画画面の幅 アプレット描画画面の高さ

コンパイル ローカルマシンでの実行 % javac Hello1.java Hello1.class ができる. Hello1.class と applet.html を同じディレクトリに置く ローカルマシンでの実行 % appletviewer applet.html または普通の html ファイルとして閲覧する ことによって実行. Windows などでは、applet.html のアイコンを開く (ダブルクリックなど)

- ftp 等で *.class と *.html をサーバに転送 WWW サーバに載せる場合 - ftp 等で *.class と *.html をサーバに転送 - この html をブラウザで見れば実行開始 - *.class をブラウザが受信して、ローカル(クライアント)マシンで実行される http server applet.html Hello1.java

1-4 オブジェクト指向とイベント駆動 「オブジェクト」と「メッセージパッシング」 マルチプロセスOSと類似 Java プログラムは「クラス」の定義の列 1つのクラスの中身は、1つの C プログラムに類似 … 「メソッド」~関数 クラスはオブジェクトの鋳型 … new で生成 「イベント」駆動 OS がプログラムを呼び出す

2.簡単なアプレット 2-1 ボールを表示 2-2 マウスをクリックした場所にボールを移動 2-3 ボール処理部分を分離

2-1ボールを表示 プログラム 1. import java.awt.*; import java.applet.*; public class BallApplet1 extends java.applet.Applet { public void paint(Graphics g) // ブラウザの表示が更新されるとき、 // ブラウザ側から呼び出される. { g.setColor(Color.red); g.fillOval(100,100, // 楕円が入る左上の座標(x,y) 30,30); // 楕円の幅と高さ }

import … 利用する既存のクラスを指定. ボールを表示するプログラム import … 利用する既存のクラスを指定. java.awt.* … awt は Abstract Window ToolKit(ポータブル GUIライブラリ)である. java.awt は awt「パッケージ(クラスやパッケージの集合)」を表す. Graphics クラスを使うために必要. public … 外部からアクセス可 <-> private class クラス名 … このクラスの名前 extends … クラスの「拡張(継承)」, 上位クラスの定義がまるごと使える Applet クラス… applet の道具立て. 様々なデフォルト(メソッド etc.)が準備されている.

ボールを表示するプログラム void… C の場合と同じ. 値を返さない。 paint… 描画を行う「メソッド」. 表示が更新されたときなど、ブラウザ側から、何度も呼び出される Graphics g… オブジェクト g が描画画面 g.setColor … 色の設定, オブジェクト g の setColor メソッドを呼び出す(メッセージパッシング) Color.red … Color クラスの赤 (定数) g.fillOval … 塗りつぶし楕円を描く,

2-2.マウスをクリックした場所にボールを移動 プログラム2. import java.awt.*; import java.applet.*; public class BallApplet2 extends java.applet.Applet { int px,py; public void init() // 初期化のとき呼ばれる. { px=100; py=100; } public boolean mouseDown(Event e,int x, int y) // マウスがクリックされたとき呼ばれる { px=x; py=y; repaint(); return true;} public void paint(Graphics g) { g.setColor(Color.red); g.fillOval( px,py, 30,30); }

マウスをクリックした場所にボールを移動 int px,py; … ボールの位置 init … 初期化のとき(最初の1回)ブラウザ側から呼ばれる. この他 start, stop 等も使える. boolean … ブール型, true, false mouseDown … マウスがクリックされたとき、ブラウザ側から呼ばれる. true を返すと、この後,なにもしない. repaint … 画面を clear した後, paint を呼び出す.

2-3.ボール処理部分を分離 import java.awt.*; import java.applet.*; プログラム 3. (1/2) import java.awt.*; import java.applet.*; public class BallApplet3 extends java.applet.Applet { ABall ball; public void init() // 初期化のとき呼ばれる { ball=new ABall(100,100,Color.red); } public boolean mouseDown(Event e,int x, int y) // マウスがクリックされたとき呼ばれる { ball.mouseDown(x,y); this.repaint(); return true; } public void paint(Graphics g) { ball.paint(g); } }

プログラム3(2/2) class ABall{ int px,py; Color color; public ABall(int x, int y, Color c) // “constructor” { px=x; py=y; color=c;} // public void mouseDown(int x, int y) { px=x; py=y; } // マウスがクリックされたとき、場所を変える public void paint(Graphics g) { g.setColor(color); g.fillOval( px,py, 30,30); // 塗りつぶした楕円を描く }

ボール処理部分を分離 Ball ball … Ball型(クラス)の オブジェクトを格納する変数 ball を宣言. 別のクラスを利用-「コンポジション」 ball=new Ball(…) … 「コンストラクタ」 Ball(…)によって新たにオブジェクトを作り ball に代入. ball.○○ … ball オブジェクトの○○メソッドまたは変数 this.repaint() … this はこの(アプレット)オブジェクトを示す. int は new していないことに注意 public Ball(…) … コンストラクタ. オブジェクトを生成するときに使用, void 等の型がないことに注意.

3.動画の表示 - ボールを動かす 3-1 設計方針 3-2 ABall クラス 3-3 動かないアプレット 3-4 動くアプレット … Thread の利用

3-1. 設計方針

ABall クラス (1/2) class ABall{ double px,py; //ボールの場所 double dx,dy; //一定時間後の移動. 進行方向 double velocity; //速度(の係数) double xmin,xmax; // x 方向の移動範囲 double ymin,ymax; // y 方向の移動範囲 Random rm; // rm は乱数発生装置 Color color; public ABall(int x, int y, Color c) {init(x,y,c);} public void init(int x, int y, Color c) { px=x; py=y; color=c; xmin=10.0; xmax=300.0; ymin=10.0; ymax=300.0; velocity=10.0;rm = new Random(); dx=rm.nextDouble()*2-1.0; dy=rm.nextDouble()*2-1.0; }

ABall クラス (2/2) public void advance(){ px+=(dx*velocity); py+=(dy*velocity); if(px < xmin){dx=rm.nextDouble(); dy=rm.nextDouble()*2-1.0;} if(xmax < px){dx=-rm.nextDouble(); dy=rm.nextDouble()*2-1.0;} if(py < ymin){dy=rm.nextDouble(); dx=rm.nextDouble()*2-1.0;} if(ymax < py){dy=-rm.nextDouble(); dx=rm.nextDouble()*2-1.0;} } public void paint(Graphics g) { Color cc=g.getColor(); g.setColor(color); g.fillOval((int)px,(int)py,30,30); g.setColor(cc);

ABall クラス Random… 乱数発生クラス. java.util.* パッケー ジを import する必要あり. rm.nextDowble() … 次の, 0 から 1 までの double 値の乱数を返す. g.getColor() … 現在の描画色を返す. g.setColor(Color) … 描画色を Color にする. advance() … 次のボールの位置の計算. 壁 に当たったら, random な方向に反射さ せる.

3-2. 動かないアプレット プログラム4. public class MoveBall1 extends java.applet.Applet { ABall b1; boolean eol; // もし真なら、ループの実行を終了 public void init() { b1=new ABall( 50,50,Color.red); eol=false;} public void start() { run();} public void run(){ System.out.println("run start"); while(!eol){ System.out.println("while loop"); advance(); repaint(); try{ Thread.sleep(20);} catch(InterruptedException e){} }} public void stop() { eol=true; } // 停止のとき実行 public void advance() { b1.advance(); } public void paint(Graphics g) { b1.paint(g); } }

動かないアプレット start() … 初期化後, アプレット開始のためブラウザ側から呼び出される. ここでは run を実行する. run() … while ループ内で, ボールの移動と描画を繰り返す. ところが, ブラウザには何も表示されない. stop() … アプレット停止のためブラウザ側から呼び出される. これが呼び出されると, run() を終了させる.

動かないアプレット Thread.sleep(20) … 20 m 秒, 実行を停止する. sleep は, 割り込み例外(エラー)が発生したとき, InterruptedException という型の例外オブジェクトを「投げる」. static メソッド. C の関数のように利用可 try{処理} catch(Exception e){例外処理} … 例外が発生する可能性のある処理を行い, もし例外が発生したら例外処理を行う.

3-3. 動くアプレット… Thread の利用 public class MoveBall2 extends java.applet.Applet implements Runnable{ ABall b1; Thread me; public void init() { b1=new ABall(30,30,Color.red); me=new Thread(this); me.start(); } public void run(){ while(me!=null){ advance(); repaint(); try{ Thread.sleep(20);} catch(InterruptedException e){}} public void stop() { me=null; } public void advance() { b1.advance(); } public void paint(Graphics g) { b1.paint(g); } プログラム5.

implements Runnable … このアプレットを新しい 制御 Thread として動かすために Runnable 「イ 動くアプレット implements Runnable … このアプレットを新しい 制御 Thread として動かすために Runnable 「イ ンターフェース」を付ける. メソッド run を定義し なければならない. Thread me … Thread クラスの変数 me の宣言, me=new Thread(this) … me にこのアプレット (this)の Thread を代入する. me.start() … me を新しい制御 Thread として開始. start() は run() を呼ぶ. Applet の start とは別.

4.アプレットの改良 4-1 複数のボールを動かす(1) 4-2 複数のボールを動かす(2) 4-2 複数の形を動かす … extend, 継承 4-4 マウスのクリックでボールを起動、停止させる プログラム 9 4-3 オーバーライディングによるメソッドの修正 プログラム 10. 4-4 ダブルバッファリングによるちらつき解消 プログラム 11.

複数のボールを動かす

4-1 複数のボールを動かす(1) プログラム 6. public class Balls1 extends java.applet.Applet implements Runnable{ ABall b1,b2,b3; Thread me; public void init() { me=new Thread(this); b1=new ABall(30,30,Color.red); b2=new ABall(80,200,Color.blue); b3=new ABall(100,100,Color.yellow); me.start(); } public void run(){ while(true){ advance(); repaint(); try{ me.sleep(20);} catch(InterruptedException e){} } 個別に扱うのは大変 ABall クラスから 3つのオブジェクトを 生成

複数のボールを動かす (1)(2/2) public void stop() { me=null; } public void advance() { b1.advance(); b2.advance(); b3.advance();} public void paint(Graphics g) { b1.paint(g); b2.paint(g); b3.paint(g); } } 個別に扱うのは大変

4-2 複数のボールを動かす(2) プログラム 7. public class Balls2 extends java.applet.Applet implements Runnable{ Vector balls; Thread me; int nballs; public void init() { me=new Thread(this); balls=new Vector(); balls.addElement(new ABall(30,30,Color.red)); balls.addElement(new ABall(80,200,Color.blue)); balls.addElement(new ABall(100,100,Color.yellow)); balls.addElement(new ABall(20,100,Color.black)); balls.addElement(new ABall(100,20,Color.green)); balls.addElement(new ABall(40,70,Color.white)); nballs=6; me.start(); } オブジェクトの配列に利用. 複数のオブジェクトをこの配列にまとめる オブジェクトを追加する, 配列の大きさは自動的に変わる

複数のボールを動かす (2) (2/2) public void run(){ while(true){ advance(); repaint(); try{ me.sleep(20);} catch(InterruptedException e){} } public void stop() { me=null; } public void advance() { int i; for(i=0;i < nballs;i++) ((ABall)(balls.elementAt(i))).advance(); } public void paint(Graphics g) ((ABall)(balls.elementAt(i))).paint(g); } i 番目のオブジェクト キャスト

4-3 複数の形を動かす … extend, 継承 プログラム8.

複数の形を動かす …. 形クラス定義の追加部分 class ARect extends ABall{ public ARect(int x, int y, Color c){ init(x,y,c);} public void paint(Graphics g) { Color cc=g.getColor(); g.setColor(color); g.fillRect((int)px,(int)py,30,30); g.setColor(cc); } class Hello extends ABall{ public Hello(int x, int y, Color c){ init(x,y,c);} { Color cc=g.getColor(); g.setColor(color); g.drawString("Hello.",(int)px,(int)py); g.setColor(cc); 矩形の塗りつぶし表示 ABall の継承(copyに類似) 文字列の表示

複数の形を動かす … アプレットの初期化部分 public class Figs extends java.applet.Applet implements Runnable{ Vector figs; int nfigs; Thread me; public void init() { me=new Thread(this); nfigs=5; figs=new Vector(nfigs); figs.addElement(new ABall(30,30,Color.red)); figs.addElement(new ABall(80,200,Color.blue)); figs.addElement(new ABall(100,100,Color.yellow)); figs.addElement(new ARect(150,250,Color.blue)); figs.addElement(new Hello(200,200,Color.green)); me.start(); } …. balls->figs, nballs->nfigs

4-3 オーバーライディングによるメソッドの修正 プログラム 10. 4-4 ダブルバッファリングによるちらつき解消 プログラム 11.

5.市販開発環境の利用 5-1 GUI をドラッグ&ドロップで作成 プログラム 12 5-1 Access をアクセスするアプレットの開発 5-2 絵を DB に保存できるお絵描きアプレット

5-1 GUI をドラッグ&ドロップで作成 TextField, Button, Label を ドラッグ & ドロップ

イベントの関連付け … イベント処理の半自動作成

クラス階層図

イベント処理メソッドの修正

実行

5-2 Access をアクセスするアプレットの開発

ODBC の設定

開発環境における java プログラム自動生成ツール

自動的に作成されたフォーム

実行

5-3 絵を DB に保存できるお絵描きアプレット

参考文献 JAVA 実践プログラミング,O’REILLY JAVA スレッドプログラミング, O’REILLY http://java.sun.com http://www.gamelan.com http://www.tobata.isc.kyutech.ac.jp/~yamanoue/researches/java/