Document

7.Buttonオブジェクト

Button1.java
7
8
Button b = new Button(“Hello”);
// Helloとラベルのついたボタンを構築
add(b);
//実装
*ボタンは生成されるが、アクションは起きない

Button2.java
6 implements ActionListener{
//アクションイベントを受け取るためのインターフェース
11 b.addActionListener(this);
//bに対し、アクションイベントを登録
14 public void actionPerformed(ActionEvent e){
//アクションイベントが発生すると呼び出されるメソッド
15 g.fillArc(100, 100, 100, 100, 30, 300);
16 }
7.実習
ボタンを押す度にパックマンの向きが替る
Button3.java を書け.
 (ヒント,0-9 までの乱数を作るには
(int)Math.round(Math.random()*10.0) を実行
する.毎回書換えるには,repaint()を呼ぶ. 向き
を覚えておくインスタンス変数を使う)
 補足

Randomクラスのメソッドを用い、乱数を取得することも出来ます。
import java.util.Random;
Random rnd = new Random();
rnd.nextInt(int x); //
0~x-1までのint型の乱数を返す
7.実習Button3.java 解答例
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public void paint(Graphics g){
g.fillArc(100, 100, 100, 100, kakudo,
300);
}
public void
actionPerformed(ActionEvent e){
kakudo =
(int)Math.round(Math.random()*3
60);
repaint();
}
public class Button3 extends Applet
implements ActionListener {
int kakudo;
Graphics g;
public void init(){
Button b = new Button("Hello");
add(b);
b.addActionListener(this);
g = getGraphics();
kakudo = 60;
}
}
8.Imageの描画

Image.java
6 Image c =
getImage(getDocumentBase(),"kuma.gif");
//画面に表示できるImageオブジェクトを返す
//アプレットが埋め込まれているドキュメントのURLを返す
7 g.drawImage(c, 100, 100, this);
//指定されたイメージの利用可能な部分を描く
8.実習
Image1.javaを変更し、画像を縮小して表示す
るImage2.javaを書け
 ヒント
GraphicsクラスのdrawImageメソッドは、複数
存在します。用途によって使い分けてください。

drawImageメソッド

Graphicsクラス
drawImage(Image img,int x,int y,Color bgcolor,ImageObserver observer)
drawImage(Image img, int x, int y, ImageObserver observer)
drawImage(Image img, int x, int y, int width, int height, Color bgcolor,
ImageObserver observer)
drawImage(Image img, int x, int y, int width, int height,
ImageObserver observer)
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1,
int sx2, int sy2, Color bgcolor, ImageObserver observer)
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1,
int sx2, int sy2, ImageObserver observer)

詳細は、仕様書を
8.実習Image2.java 解答例
import java.applet.Applet;
import java.awt.*;
public class Image2 extends Applet{
public void paint(Graphics g){
Image c = getImage(getDocumentBase(),"kuma.gif");
g.drawImage(c, 100, 100, 50, 50, this);
//c画像の左上隅が(100,100)の位置で、
//高さ50、幅50で表示
}
}
9.Checkboxオブジェクト
Checkbox1.java
7 Checkbox c = new Checkbox("Open");

//”Open”というラベルのチェックボックスを作成
*これだけでは、ボタンをチェックしても何も起こらない

Checkbox2.java
6 implements ItemListener{
//項目イベントを受け取るためのリスナーインターフェース
12 c1.addItemListener(this);
//c1に対しアクションイベントを登録
21 public void itemStateChanged(ItemEvent e){
//項目選択のイベントが発生すると呼び出されるメソッド
22 Checkbox c =
(Checkbox)e.getItemSelectable();
//イベントの発生元を返す
23 String s = c.getLabel();
//指定したチェックボックスのラベルを返す
27 if(c.getState()){
//チェックボックスの状態がオンならtrue、オフならfalseを返す
9.演習

演習 Checkbox2.javaを改良し,"Open"ボタ
ンを付けたCheckbox3.javaを書け. ここで,
パックマンは指定されている時だけ口を開け
る. (ヒント. fillArc )
9.演習Checkbox3.java 解答例
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Checkbox3 extends Applet implements
ItemListener{
int t = 30;
int srcA = 300;
Color color = Color.black;
public void init(){
Checkbox c1 = new Checkbox("Turn");
add(c1);
c1.addItemListener(this);
Checkbox c2 = new Checkbox("Upset");
add(c2);
c2.addItemListener(this);
Checkbox c3 = new Checkbox("Open");
add(c3);
c3.addItemListener(this);
}
public void paint (Graphics g){
g.setColor(color);
g.fillArc(100, 100, 100, 100, t, srcA);
}
public void itemStateChanged(ItemEvent e){
Checkbox c = (Checkbox)e.getItemSelectable();
String s = c.getLabel();
if(s.equals("Turn")){
t += 90;
}else if(s.equals("Upset")){
if(c.getState()){
color = Color.red;
}else{
color = Color.green;
}
}else if(s.equals("Open")){
if(c.getState()){
srcA = 360;
}else{
srcA = 300;
}
}
repaint();
}
}
10.Choiceオブジェクト
Choice.java
10 Choice c = new Choice();

//選択メニューを作成
11 c.addItem("Red");
//cに”Red”という項目を追加する
14 c.addItemListener(this);
23 public void itemStateChanged(ItemEvent e){
24 Choice c = (Choice)e.getItemSelectable();
25 String s = c.getSelectedItem();
//選択されている項目の文字列を取得
26 if(s.equals("Red")){
//sと“Red”が等しいかどうか判定
10.演習

演習 Choice1.javaを改良し,North, South,
West, Eastの選択に より位置を移動する
パックマン Choice2.javaを書け
10.演習Choice2.java 解答例
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Choice2 extends Applet implements
ItemListener{
Color col;
int x = 200, y = 200;
public void init(){
Choice c1 = new Choice();
c1.addItem("Red");
c1.addItem("Green");
c1.addItem("Yellow");
c1.addItemListener(this);
add(c1);
Choice c2 = new Choice();
c2.addItem("North");
c2.addItem("South");
c2.addItem("West");
c2.addItem("East");
c2.addItemListener(this);
add(c2);
}
public void paint(Graphics g){
g.setColor(col);
g.fillArc(x, y, 100, 100, 30, 300);
}
public void itemStateChanged(ItemEvent e){
Choice c = (Choice)e.getItemSelectable();
String s = c.getSelectedItem();
if(s.equals("Red")){
col = Color.red;
}else if(s.equals("Green")){
col = Color.green;
}else if(s.equals("Yellow")){
col = Color.yellow;
}
if(s.equals("North")){
x = 200; y = 100;
}else if(s.equals("South")){
x = 200; y = 300;
}else if(s.equals("West")){
x = 100; y = 200;
}else if(s.equals("East")){
x = 300; y = 200;
}
repaint();
}
}
11.TextField オブジェクト

6
TextField.java
implements TextListener {
//テキストイベントを受け取るためのインターフェース
7 TextField m;
11
m = new TextField(20);
//20列のTextFiledを構築
12 m.addTextListener(this);
//構築したTextFiledからイベントを受け取るためのリスナー
22 public void textValueChanged(TextEvent e){
//テキストの値が更新されると呼び出されるメソッド
23 s = m.getText();
//表示されるテキストを取得
11.演習

演習 TextField1.javaを書換えて,大きさが指
定できるパックマン TextField2.java を書け.
11.演習TextField.java 解答例
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class TextField2 extends Applet
TextField m;
int s = 100;
implements TextListener {
public void init(){
m = new TextField(20);
m.addTextListener(this);
add(m);
}
public void paint(Graphics g){
g.setColor(Color.blue);
g.fillArc(100, 100, s, s, 30, 300);
}
public void textValueChanged(TextEvent e){
s = Integer.parseInt(m.getText());
repaint();
}
}
12.GridLayoutオブジェクト

GridLayout.java
6 setLayout(new GridLayout(2,2));
//コンテナのレイアウトを設定
//指定された行数、列数を持つグリッドレイアウトを作成
12.演習

演習 GridLayout1.javaを改良して,電話番
号の画面を作る GridLayout2.javaを書け.
12.演習GridLayout2.java 解答例
import java.applet.*;
import java.awt.*;
public class GridLayout2 extends Applet{
public void init(){
setLayout(new GridLayout(3,3));
Button b1 = new Button("1");
Button b2 = new Button("2");
Button b3 = new Button("3");
Button b4 = new Button("4");
Button b5 = new Button("5");
Button b6 = new Button("6");
Button b7 = new Button("7");
Button b8 = new Button("8");
Button b9 = new Button("9");
add(b1);
add(b2);
add(b3);
add(b4);
add(b5);
add(b6);
add(b7);
add(b8);
add(b9);
}
}
宿題
9.2
マウスの動きについてくるグリーンパックマン
Pacman3.java を書け.
 9.7
TextField2.javaを参考に,大きさの指定を別
のボタンで 行うTextField3.javaを書け.

宿題

オリジナル
実行例、
~ajifry/public_html/Java/Applet/Jyanken.html
になるような、Jyanken.javaを作ってください。
画像はダウンロードしたものか、各自で用意した
ものを使ってください。