プログラミング実習(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
© Copyright 2026 ExpyDoc