中間試験の解答と解説
1:Java言語で次の働きをする予約語を答えなさい。
2:Java言語のクラスについて答えなさい
3:Appletクラスと、その内部の関数について答えなさい
4:次のプログラムを見て、以下の問に答えなさい
1 import browser.Applet;
2 import awt.Graphics;
3 import awt.Image;
4 class AudioImage extends Applet {
5 private Image backImage = null;
6 private String audioURL = null;
7 protected void init() {
8 String imageSource = getAttribute("image");
9 if( imageSource == null ) {
10 imageSource = "/hokusei/staff/fujiki.gif";
11 }
12 backImage = getImage( imageSource );
13 resize( backImage.width, backImage.height );
14 audioURL = getAttribute("sound");
15 if( audioURL == null ) {
16 audioURL = "/sounds/ah.au";
17 }
18 }
19 public void paint( Graphics g ) {
20 g.drawImage( backImage, 0, 0 );
21 }
22 public void mouseDown( int x, int y ) {
23 play( audioURL );
24 }
25 }
import browser.Applet;
import awt.Graphics;
import awt.Color;
/**
マウスの操作で絵を描くことができる Canvas のクラス定義
*/
class Canvas extends Applet {
/**
描きたい線の両端の座標
*/
protected int x1=0, y1=0, x2=0, y2=0;
/**
初期設定を行う。サイズの設定のみ。
*/
protected void init() {
resize( 600, 400 );
}
/**
アプレットにグラフィックを描く。このアプレットでは、
update() を書き換えたため、最初の表示の時にだけ呼び出される。
*/
public void paint( Graphics g ) {
g.setForeground( Color.white );
g.paint3DRect( 0, 0, 600, 400, true, true );
}
/**
アプレットにグラフィックを描く。repaint() によって呼び出される。
このアプレットでは通常とは異なり、以前の図形のクリアや、
paint() の呼び出しを行わない。
*/
public void update( Graphics g ) {
g.drawLine( x1, y1, x2, y2 ); // 線を描く
x1 = x2;
y1 = y2;
}
/**
マウスボタンが押された時に自動的に呼び出される。
*/
public void mouseDown( int x, int y ) {
x1 = x;
y1 = y;
}
/**
マウスボタンが押されたまま移動した時に自動的に呼び出される。
*/
public void mouseDrag( int x, int y ) {
x2 = x;
y2 = y;
repaint(); // update() を呼び出す
}
}
--------------------------------------------------------------
import Canvas;
import awt.Graphics;
import awt.Image;
/**
マウスの操作で絵にいたずら書きをする Rakugaki のクラス定義
*/
class Rakugaki extends Canvas {
/**
背景に使用する画像
*/
private Image backImage = null;
/**
初期設定を行う。背景の絵を読み込み、それに合わせてサイズの設定。
*/
protected void init() {
String imageSource = getAttribute("image");
if( imageSource == null ) {
imageSource = "/hokusei/staff/fujiki.gif";
}
backImage = getImage( imageSource );
resize( backImage.width, backImage.height );
}
/**
アプレットの初期状態としてイメージを表示する。
*/
public void paint( Graphics g ) {
g.drawImage( backImage, 0, 0 );
}
}
さて、左の Rakugakiアプレットをさらに改良します。
従来の Rakugakiアプレットの機能をそのまま継承し、 さらに次のような新しい機能を追加してください。
マウスのボタンを押して絵を描き始めると、 写真の人物が「ウッ」と声を発し、 絵を描き終えてマウスのボタンを放すと「ふぅ」と声を出すようにする。
音声データの URLは、それぞれ "/sounds/oh.au" と "/sounds/ah.au" と します。 これらのデータを直接 play() の引数として与えてかまいません。
新しいクラス名は Rakugaki2 とします。
(ヒント:10行程度のとても簡単なプログラムです。)
7:これからの授業では、 皆さんに新しいアプレットを設計してもらうつもりです。
「こんなアプレットがあったら、WWWのページが楽しくなる。」 というようなアイディアを考えてください。
プログラムをどう作るかは、まだ考える必要はありません。 アイディアを説明するのに、絵や図を使ってもかまいません。
(解答省略)