プログラミング実習(Java)

プログラミング実習(Java)
グラフィクス処理とGUIプログラミング
講師:坂口 利裕(横浜市立大学)
自己紹介

氏名


本務先


横浜市立大学
専門分野


坂口利裕
社会工学(都市・地域計画,都市解析)
その他は...

後ほどホームページで
2008.08.14~15
プログラミング実習(Java)
2
はじめに

成績評価

「実習」なので出席することが大前提


欠席は1時限まで
出欠のチェック



1日目:1回(この後)
2日目:レポートもどきの自己診断票の提出で代替
授業の進め方

テキストの記載順にスライド(PowerPoint)による解説+実習



1時間に1度は休憩


テキストはあえて分冊にしているので相互補完的に利用
スライド資料はWeb上にも掲載
各自での作業の際は体調に合わせて随時
質問は積極的に

2008.08.14~15
面接授業の利点を有効活用
プログラミング実習(Java)
3
「プログラミング実習(Java)」で学ぶこと

プログラミング体験者を対象





Java言語の基礎・オブジェクト指向プログラミングの概
念の理解
GUIを備えたアプリケーション作成
グラフィクス処理を備えたアプリケーション作成
Java言語による実用アプリケーション作成のための基
礎知識の習得
例題と演習による実習




まず体験-「習うより慣れよ」
既存のプログラムの改良・拡張による理解
まず自身で考えよう
他の受講生とのディスカッションや質問で不足分を補う
2008.08.14~15
プログラミング実習(Java)
4
第1日の目標
Javaプログラムの実行手順を知る
 Javaの構文になじむ
 Javaのグラフィクス機能を知る
 JavaによるGUIの表現方法を知る
(テキストp.40~第3章の終わりまで)

2008.08.14~15
プログラミング実習(Java)
5
第1章

Javaによるオブジェクト指向プログラミング

構造化プログラミング


プログラムの部品化
オブジェクト指向
手続き重視型
 イベント駆動型


はじめに「クラス」ありき
属性→(インスタンス)変数
 機能→メソッド

2008.08.14~15
プログラミング実習(Java)
6
オブジェクト指向
第1章

手続き重視型から

第2章
手続きをパッケージ化


第3章

構造化プログラミング

第4章

部品をパッケージ化


2008.08.14~15
機能単位に部品化
イベント駆動型へ

第5章
手続きの抽象化
データとは独立
属性と機能を不可分なものとして抽象化
部品の振舞いは部品ごとに書き下す
プログラミング実習(Java)
7
Java言語の特徴
第1章
第2章

Sun Microsystems社が開発し普及に努め
ている言語
 文法の基本は,C,C++に類似

第3章


第4章

第5章
2008.08.14~15
変数宣言や計算表現などはほぼ同じ
制御構造(if,for,while)もほぼ同じ
「クラス」概念によるデータ中心(オブジェクト指
向)の言語
グラフィクス処理が標準で可能
ソース互換,バイナリ互換でもある
 個人ベースの開発環境は無償配布

プログラミング実習(Java)
8
Javaにおける
アプリケーションとアプレット
第1章

アプリケーション

第2章
第3章


アプレット

第4章

第5章
2008.08.14~15
CUIプログラミングは比較的容易
GUIプログラミングはやや難

他のアプリケーション内(Webブラウザなど)で
動作することを前提とした小さなプログラム
GUIを前提としたプログラミングが比較的容易
アプレットで学んだ技法はアプリケーション開発
にも適用可能
プログラミング実習(Java)
9
Javaアプレットの特徴
第1章
第2章
第3章

Webブラウザで動作することが前提
呼出し用のHTMLファイルが必要
 ひとつのHTMLファイル内でいくつでも呼
び出し可能
 ネットワーク経由で実行可能

第4章
第5章
2008.08.14~15
プログラミング実習(Java)
10
Javaアプレットの観察(1)
第1章
第2章
第3章
第4章
第5章
2008.08.14~15

授業用ホームページ
各自のID/パスワードでログオン
 Internet Explorerを起動
 アドレスバーに
http://sakkun.cc.yokohama-cu.ac.jp/
を入力
⇒「2005年度担当授業」
⇒「プログラミング実習(Java)」へ

プログラミング実習(Java)
11
Javaアプレットの観察(2)
第1章

Javaアプレット・サンプル
それぞれ実行してみる
 ソースを見ながら特徴・雰囲気をつかむ

第2章
テキストの第Ⅱ部を活用
 自分の知っている言語と比較
第3章
第4章
第5章
2008.08.14~15


Sunのデモンストレーション

Javaの適用範囲をつかむ
プログラミング実習(Java)
12
サンプル教材のセットアップ
第1章
第2章
第3章
第4章
第5章
2008.08.14~15

テキストp.20~21も参照
プログラム例のセットアップ をクリック
 [上記の場所から実行]に切り替え[OK]
 セキュリティ警告には[実行する(はい)
(OK)]で応答
 保存先[z:\]であることを確認して[OK]
 Internet Explorerを閉じて終了

プログラミング実習(Java)
13
第2章

Javaによるグラフィクスプログラミング

Javaのプログラミングツール
Microsoft Studio .NET 2003のVisual J#
 Sun MicrosystemsのSDK(JDK)


グラフィクスの基礎
グラフィクスの基礎
 描画メソッド


Javaプログラムの制御構造

2008.08.14~15
C(C++)に酷似
プログラミング実習(Java)
14
ソース互換
第1章
ソース
プログラム
各OS・ハードウェア
の環境下で再コン
パイルが必要
第2章
第3章
第4章
第5章
2008.08.14~15
Windows用
コンパイラ
MacOS用
コンパイラ
Windows用
プログラム
OS
ハード
ウェア
Windows
DOS/V
Linux用
コンパイラ
MacOS用
プログラム
互
換
性
な
し
MacOS
Macintosh
プログラミング実習(Java)
Linux用
プログラム
互
換
性
な
し
Linux
DOS/V
15
バイナリ互換
第1章
ソース
プログラム
第2章
(Windows用)
Javaコンパイラ
VM=Virtual Machine
OSの一部として動作するよ
うに作られた擬似的ハード
ウェア(実態はソフトウェア)
第3章
第4章
OS
実行
プログラム
特定の環境でコン
パイルされたプロ
グラムであっても
他のマシン上で実
行可能
Windows+JavaVM
MacOS+JavaVM
Linux+JavaVM
DOS/V
Macintosh
DOS/V
第5章
ハード
ウェア
2008.08.14~15
プログラミング実習(Java)
16
グラフィックスの基礎
第1章

原理・基本事項

第2章

第3章
第4章


光の点(pixel)の集まりで画面が構成されてい
る
画面を表すメモリー(VRAM)に情報を書き込む
ビデオ制御用のチップがVRAMの内容に応じて
映像信号に変換
座標系(左上が原点,右向き,下向き),色情報
(RGB)
第5章
2008.08.14~15
プログラミング実習(Java)
17
画面の大きさのいろいろ
第1章


第2章
第3章
大きさの違い

色の違い

第4章
第5章
2008.08.14~15
VGA(640x480),SVGA(800x600),
XGA(1024x768)
3ビット(8),4ビット(16),8ビット(256),16
ビット(約6万5千),24ビット(1600万),32
ビット(??)
プログラミング実習(Java)
18
プログラミング言語による制御
第1章

第2章
国際規格はあるにはある(ライブラリ
の規約)

第3章
第4章
第5章
2008.08.14~15

GKS,Phigsなど
プログラミング言語としての規格
BASICの描画命令など
 Java言語

(Javaスクリプトとは別物)
 文法ではなく標準のクラス・ライブラリ

プログラミング実習(Java)
19
Java言語によるグラフィクス処理
第1章
第2章
第3章

アプレットによる場合
ソースプログラムを作る(~.java)
 コンパイルする(javac ~.java)
 表示用のHTMLファイルを作る
( ~.html)

第4章
第5章


HTMLファイルをWebブラウザで閲覧

2008.08.14~15
<applet>タグを使用
コンパイルされたclassファイルがブラウザ内
で実行される
プログラミング実習(Java)
20
図形描画のメソッド(1)
第1章
第2章
 g.drawLine( 始点のx座標,始点のy座標,
終点のx座標,終点のy座標) ;
第3章
第4章
第5章
2008.08.14~15
プログラミング実習(Java)
21
図形描画のメソッド(2)
第1章
 g.drawRect(
左上のx座標,左上のy座標,幅,高さ) ;
第2章
第3章
第4章
第5章
 g.fillRect(
左上のx座標,左上のy座標,幅,高さ) ;
2008.08.14~15
プログラミング実習(Java)
22
図形描画のメソッド(3)
第1章
 g.drawOval(
左上のx座標,左上のy座標,幅,高さ) ;
第2章
第3章
第4章
第5章

2008.08.14~15
g.fillOval (
左上のx座標,左上のy座標,幅,高さ) ;
プログラミング実習(Java)
23
図形描画のメソッド(4)
第1章

drawPolygonまたはfillPolygon

第2章
第3章
第4章
第5章
2008.08.14~15

各頂点の座標をint型の配列に納める
int[] xarray = new int[3], yarray=new int[3] ;
xarray[0]=0 ; yarray[0]=30 ; …など
(固定位置なら初期値に設定してもよい)
(位置や向きを変化させるならそのつど計算)
頂点の数を指示して呼び出す
//輪郭
backG.drawPolygon(xarray,yarray,3) ;
//塗り潰し
backG.fillPolygon(xarray,yarray,3) ;
プログラミング実習(Java)
24
図形描画のメソッド(5)
第1章
第2章
第3章

色の変更
Color c =
new Color( Rの値(0~255), G, B ) ;
 g.setColor( c ) ;
を呼び出してから描画関数を使用

第4章
第5章
2008.08.14~15
プログラミング実習(Java)
25
練習
第1章
第2章
第3章
第4章

sample01.javaに対して
図形の色を変えてみよ
 日本の国旗(日の丸)を描くプログラムを
作成せよ
 いわゆる「三色国旗」と呼ばれる国の国
旗を描くプログラムを作成せよ


第5章
2008.08.14~15
見本は
外務省ホームページ(日本語)-世界の国旗を参照
プログラミング実習(Java)
26
「日本の国旗」(大きさの目安)
50
50
300
200
2008.08.14~15
プログラミング実習(Java)
27
「日本の国旗」(座標の計算)
g.setColor(Color.white)
g.fillRect(x,y,w,h);
50
50
300
200
g.setColor(Color.red)
g.fillOval(x,y,w,h);
2008.08.14~15
プログラミング実習(Java)
28
Javaの変数
第1章
第2章

暗黙の変数はない

型(クラス)を明示的に指定して宣言

第3章

型(クラス)名 変数名 ;
配列は次元ごとに[ ]を添えて宣言
型名[ ] 変数名 ; // 1次元配列
 型名[ ][ ] 変数名 ; // 2次元配列
 初期値で与えられた場合はその数だけ割付
 new 型名[要素数]【 [要素数] …】で明示的
に割付

第4章
第5章
2008.08.14~15
プログラミング実習(Java)
29
Javaの演算機構
第1章

四則演算


第2章

代入演算

第3章

第4章
第5章


== != < > >= <=
論理演算

2008.08.14~15
単純 =
四則演算 += -= *= /= %=
インクリメント ++ デクリメント--
関係演算


+-*/ %(整数値の剰余)
べき乗はない(Mathのメソッドで対応)
論理積 && 論理和 || 論理否定!
プログラミング実習(Java)
30
Javaの制御機構
第1章

条件分岐

第2章
第3章

第4章
第5章
2008.08.14~15

if(論理式) {
文1
}
【else {
文2
}】
switch(式) {
case 値1: 文;
【break;】
case 値2: 文;
【break;】
…
【default: 文; 】
}
プログラミング実習(Java)
反復



for(初期化;
論理式;
再初期化) {
文
}
while(論理式) {
文
}
do {
文
} while(論理式) ;
31
練習
第1章
第2章
第3章
第4章

sample02.java に対して
線の形を変える
 線の数を変える
 平行移動の幅を変える
 2重の反復処理に拡張する

第5章
2008.08.14~15
プログラミング実習(Java)
32
第3章

JavaによるGUIプログラミングの基礎

GUI部品の制御
各部品の生成と配置
 イベントの監視(リスナー)


マウスの制御

2008.08.14~15
イベントの監視と位置の取り出し
プログラミング実習(Java)
33
Javaにおける代表的GUI部品
第1章
第2章
第3章
第4章
第5章
2008.08.14~15
テキストフィールド
 テキストエリア
 ボタン
 ラベル

プログラミング実習(Java)
34
TextField
第1章


第2章

第3章
第4章
変数として定義
実体を割り付ける


TextField sinchouRan ;
sinchouRan = new TextField(6) ;
画面に割り付ける

add(sinchouRan) ;
第5章
2008.08.14~15
プログラミング実習(Java)
35
TextFieldからのデータ取り出し
第1章

文字列の場合

第2章

第3章
第4章
第5章
2008.08.14~15
整数値の場合


String s ;
s = shinchouRan.getText() ;
int i ;
i = Integer.parseInt(shinchouRan.getText() ) ;
実数値の場合

float f ;
f=
Float.valueOf(shinchouRan.getText()).floatValue(
);
プログラミング実習(Java)
36
イベント処理
第1章

ボタンのクリック・ダブルクリック
 マウスの移動・マウスのクリック

第2章
第3章
第4章
ある部品に対するアクション

プログラムで受信して処理

リスナーを定義して処理内容を記述して
おく
第5章
2008.08.14~15
プログラミング実習(Java)
37
イベントとアプレット内のメソッド
第1章
プログラマが必要
に応じて規定
第2章
システムから
ユーザから
イベント
イベント
repaint()
リスナ
共通変数の初期化
第3章
init()
(復帰)
update()
第4章
start()
プログラマが規定
paint()
第5章
イベント待ち
(復帰)
プログラマが必要
に応じて書換え
アプレット全体の流れ
2008.08.14~15
プログラミング実習(Java)
38
練習 (GUI部品の扱い方)
第1章
第2章

sample04.javaに対して
判定結果による背景色の変更
 ローレル指数をBMIに変更

第3章

第4章
BMI=Body Mass Index
BMI = 体重[kg]/身長2[m]
= 体重[kg]*10000 / (身長[cm]*身長[cm])
BMIに基づく標準体重の(計算と)表示
 グラフ風の表現

第5章
2008.08.14~15
プログラミング実習(Java)
39
練習(マウスの扱い方)
第1章
第2章

sample05.javaに対して

ドラッグへの対応

第3章

ドラッグに対応するリスナを追加
形・色の追加
配列に情報を追加
 描画用メソッドの拡張

第4章

大きさの制御
第5章
2008.08.14~15
プログラミング実習(Java)
40