総合科目
Java
文法および例題の説明
情報科学科 西田 友是
Javaとは、SunMicrosystems社が開発したプログラム開発言語である。基本的にはCやBasicなどといったソフトウェア開発言語と同じである。C++によく似ているが、ポインタなどが無くなったため、バグなども少なく、わかりやすい開発言語である。また、Javaには他の言語にはない新しい機能が多くあり、以下にその特徴を示す。
1)Javaで作ったプログラムはホームページの中で動作する
2)コンピュータは大別するとIBM-PC互換機やPC-98、Macintosh、ワークステーションの3つに分けることができるが、どの機種でも動作する。
3)Javaはネットワークに対応しているので、Javaのあるホームページを見ると、ブラウザはそのアプレットをサーバからネットワークを通じて自分のコンピュータにダウンロードし、実行することができる。
4)セキュリティの面では、JAVAで作られたアプレットやアプリケーションは実行する前にJavaインタプリンタでチェックを受けるのでコンピュータウィルスやバグがあるプログラムは実行して悪影響を及ぼす前にほとんど摘出することができる。
5)マルチスレッド機能を実現している。スレッドとはCPUが実行できるプログラムの単位で、マルチスレッド機能とは、複数のスレッドを同時に実行できる機能のことである。 実際には、 CPUは1つしかないので、1度に実行しているスレッドは1つであるが複数のスレッドを高速に 切り替えて実行しているので、見かけは同時に実行しているように見える。
2.
Javaのコンパイルおよび実行
Java
を実行する方法としては、Javaインタープリタで実行する方法とWebブラウザに表示する方法がある。単独で動作すアプリケーションとWebブラウザに表示するアプレットがある。アプレットの場合、HTMLファイルにJavaのバイトコードの名前を記述する。
コマンド |
機能 |
Javac |
プログラミング言語 Java のコンパイラ |
Java |
Java アプリケーションの起動コマンド |
appletviewer |
Web ブラウザなしでアプレットの実行やデバッグが可能 |
Javadoc |
API ドキュメントジェネレータ |
3.
JDKのバージョンについて
JDK
のバージョンはJDK.1.0からJDK1.2まである。ただし、機種により最新版は異なる。JDK.1.0とJDK1.1以降とでは相違がある。主要な 相違点は、 マウス等のイベント処理、スクリーンのサイズの取得方法が違う。新しいバージョンでコンパイルする場合、古いバージョンのものは警告が表示される。新バージョンの文法に従う方が推奨されている。しかし、まだ古いバージョンのブラウザを使用している人もあるので、インターネットで公開する際は古いバージョンで作成する方が安全とも言える。
4.
グラフックに必要なJavaの文法
本稿では、グラフックへの応用が主であるのでアプレットを中心に説明する。
4.1
アプレットのメソッド1)
単純な構造の場合;
Import Java.applet.*; Import Java.awt.*;
public class Graphics extends Applet { public void init( ) { // 初期化プログラムの挿入} public void paint(Graphics g) { // 表示プログラムの挿入} } |
2)
標準的な場合;
Import Java.applet.*; Import Java.awt.*;
public class Graphics extends Applet { public void init() { // 初期化プログラム(appletロード時に実行)} public void start() { // applet 開始時に実行} public void stop() { // applet 停止時に実行} public void destroy() { // applet アンロード時に実行} public void paint(Graphics g) { // 表示プログラムの挿入} } |
4.2
アプレットの実行
アプレットは
Webブラウザあるいはappletviewerで表示する。実行するにはHTMLファイルが必要である。HTML
ファイル中では次のように記述する。
<APPLET CODE=test.class width=350 height=330> </APPLET>
|
ここで、
CODE=クラス名、 width=横幅、 height=高さ必要に応じて、パラメータを入力するには、下記のように指定する
(変数dataに 0を代入例)。
<APPLET CODE=test.class width=350 height=330> <PARAM NAME="data" VALUE="0"> </APPLET> |
4.3
配列の宣言
形式 |
例 |
配列サイズの宣言例 |
データの型 [ ] 配列名; |
double[ ] a; |
Int[ ] a; a = new int[10]; |
データの型 配列名[ ]; |
double a[ ]; |
Int[ ] a = new int[10]; |
4.4
オブジェクトの生成方法
定義したクラスをもとにnew演算子を使ってオブジェクトを生成する。この生成には次の2通りある。
オブジェクトの生成方法 |
例 |
クラス名 変数名;変数名 = new クラス名; |
Face polygon; polygon = new Face(); |
クラス名 変数名 = new クラス名; |
Face polygon = new Face(); |
4.5 Java
で使用できる図形
図形要素 |
書式 |
直線 |
drawLine(int x1, nt y1, int x 2, inty2) (x1,y1) から(x2,y2)へ直線を引く |
長方形 |
drawRect (int x, inty, int width, int height) 線画fillRect(int x, int y, int width, int height) 塗りつぶしclearRect(int x, int y, int width, int height ) 長方形を背景色で塗りつぶす(x,y) は左上角の座標、 width、heightは横幅と高さ |
丸角長方形 |
drawRoundRect(int x, inty, int width, int height, int arcWidth, int arcHeight)fillRoundRect (int x, inty, int width, int height、int arcWidth, nt arcHeight)(x,y) は左上角の座標、Width, heightは横幅と高さ, arc Width,arc Heightはコーナーの丸くする部分のサイズ |
3D 長方形 |
draw3Drect(i ntx, inty, int width, int height, boolean raised)fill3Drect(int x, inty, int width, int height, boolean raised)(x,y) は左上角の座標、width, heightは横幅と高さraisedは陰影の付け方で、trueは長方形が「飛び出したように」 falseならば「窪んだように」表示される |
楕円 |
drawOval (intx, int y, int width, int height)fillOval(int x、inty, int width、int height )(x,y) は左上角の座標width、heightは楕円を囲む長方形の横幅と高さ |
円弧 |
drawArc(int x、inty, int width, int height, int startAngle, int arc Angle)fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)drawArc は円弧、fillArcは塗りつぶした扇型を描く(x,y) は左上角の座標、width、heightは横幅と高さ,startAngle 、arcAngleは円弧を描き始める角度と角度の量の度数 |
多角形 |
drawPolygon(int xPoint , int yPoint , int nPoint) fill Polygon(int xPoint, int yPoint 、int nPoint)xPoint、yPoint は多角形の各頂点のx, y座標の配列、nPointは頂点の個数 |
文字例 |
drawString(String str, nt x, int y) 左下座標を(x,y) として、文字列strを描く |
画像表示 |
drawImage((Image img, int x, int y, c) 左下座標を(x,y) として画像imgを表示 |
なお、点(画素)の描画は特に無いので、下記のどちらかで指定する。
g.drawLine(x,y,x,y); g.fillRect(x,y,1,1); |
スクリーンのサイズを width × height の場合、 Javaで使用するスクリーンの座標系は左上が原点(0, 0)であり、右下の座標が (width-1, height-1)である。スクリーンの中心(x0, y0)を原点とする座標(x, y)は、(x+x0, y0-y)のように変換して描画する必要がある。
スクリーンのサイズはHTMLファイル(4.2参照)で指定できる。また、プログラム内でスクリーンのサイズを得るには下記の方法がある。
Size の取得 |
Size の設定 |
|
JDk1.0 |
Dimension appsize = size(); width = appsize.width; height = appsize.height; |
resize(width, height); resize(Dimension); |
JDK.1.1 |
width = getSize().width, height = getSize().height |
setSize(width, height); setSize(Dimension); |
次のように3通りある(白の例)。
g.setColor(new Color(255,255,255) ); |
g.setColor(Color.white); |
Color shiro = Color.white; g.setColor( shiro ); |
Color クラスの変数 |
色 |
RGB |
Color.white |
白 |
255 、255、255 |
Color.lightGray |
明るい灰色 |
192 、192、192 |
Color.gray |
灰色 |
128 、128、128 |
Color.darkGray |
暗い灰色 |
64 、64、64 |
Color.black |
黒 |
0 、0、0 |
Color.red |
赤 |
255 、0、0 |
Color.pink |
ピンク |
255 、175、175 |
Color.orange |
オレンジ |
255 、200、0 |
Color.yellow |
黄 |
255 、255、0 |
Color.green |
緑 |
0 、255、0 |
Color.magenta |
マゼンタ (赤紫色) |
255 、0、255 |
Color.cyan |
シアン (青緑色) |
0 、255、255 |
Color.blue |
青 |
0 、0、255 |
4.7 Math
クラス
代表的なメソッドを下表に示す。
種類 |
メソッド |
引数の型 |
戻り値の型 |
sin |
Math.sin(d) |
double 、ラジアン |
double |
平方根 |
Math.sqrt(d) |
double |
double |
絶対値 |
Math.sbs(a) |
double, float, int, long |
aと同じ |
指数 |
Math.exp(d) |
double |
double |
べき乗 |
Math.pow(x, y) |
double |
double |
最大 |
Math.max(a, b) |
double, float, int, long |
aと同じ |
対数 |
Math.log(d) |
double |
d ouble |
乱数 |
Math.random() |
なし |
double (0. と1.の間) |
なお、定数としてはπを表す
Math.PIなどがある。
4.8
パッケージ
関連のあるクラスをまとめたものをパッケージまたはクラスライブラリと呼ぶ。プログラム中で使用する場合は、プログラムの最初の部分で
import 文で呼び出す。
パッケージ名 |
内容 |
Java.applet |
アプレットを実行するためのクラス |
Java.awt |
ボタンやスクロールバーなどのGUIを使うためのクラス |
Java.event |
イベント処理のためのクラス |
Java.lang |
文字列などの基本的なクラス |
Java.util |
日付や乱数を使うためのクラス |
4.9
レイアウト
種々のGUI部品を配置を画面で行なうには、レイアウトマネージャが使われる。特に指定しない場合には、FlowLayout が使用される。これを含み下記の5つのレイアウトマネージャがある。
レイアウト |
機能 |
FlowLayout |
部品を横 1行に並べる |
BorderLayout |
部品を上下、左右、中央に配置する |
GridLayout |
部品をタイル状に表の中に配置する |
GridBagLayout |
異なる大きさの部品をタイル状に配置する |
CardLayout |
部品をカードをめくるように順番に配置する |
GUI
部品からの入力を処理することをイベント処理という。GUI部品の主なものとして、ボタン、チョイス、チエックボックス、スクロールバー、テキストフィールドなどがある。イベント処理は、JDK1.0では主にactionメソッドが使用されるが、JDK1.1ではイベントリスナが使用される。代表的なマウスの利用を説明する。下記はマウスでクリックした点の座標を入力し、点pに代入する例である(関係部分のみ記述)。
1)JDK1.1以後の形式で記述したもの
import Java.applet.*; import Java.awt.*; import Java.awt.event.*;
public class test extends Applet implements MouseListener {
public void mousePressed(MouseEvent e) { } public void mouseClicked(MouseEvent e) { Point p = new Point(e.getX(), e.getY()); } public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseMoved(MouseEvent e) { } } |
ここで、
mouseClicked しか使用しなくてもmouseReleased等他のすべてのもの記述しておくこと。
2)JDK1.0の形式で記述したもの:
import Java.applet.*; import Java.awt.*;
public class test extends Applet { public boolean mouseDown(Event evt, int x, int y) { Point p = new Point(x,y); return true; } } |
4.11
図形要素のサンプルアプレット
上の図形要素の記述例(一部省略)
g.drawImage(image, 320, 40, c); // draw an image