プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11...

29
1 1 プログラミング言語3 11回(20071210日) 2/57 今日の配布物 片面の用紙1 今日の課題が書かれています。 本日の出欠を兼ねています

Transcript of プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11...

Page 1: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

1

1

プログラミング言語3

第11回(2007年12月10日)

2/57

今日の配布物

� 片面の用紙1枚

� 今日の課題が書かれています。

本日の出欠を兼ねています

Page 2: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

2

3/57

今日やること

� http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/

にアクセスすると、教材があります。

� 2007年12月10日分と書いてある部分が、本日の教材です。

� 本日の内容

� 前回の課題の解答

� Javaアプレット その2

� AWT

4/57

最終レポートについて

Page 3: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

3

5/57

課題について

� 最終レポートの課題を、今週の木曜日夜までに、web

にアップします。

� 〆切は最後の授業(2008年1月7日)です。

最後の授業では、レポートと関係ない話をやります

(たぶん、入出力関係とスレッド)。

� レポートは、

� 紙に印刷したものをレポートボックスに、

� メールで [email protected]に、

提出して貰います。

6/57

前回の課題の解答

Page 4: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

4

7/57

前回の課題

その1:次の仕様を満たすJavaアプレット Sample10t.java を作

り、提出しなさい。

� htmlファイルが無くともアプレットビューアで実行できること。

� 実行すると、200x400 の画面が立ち上がる。

� 200x400 の画面の

� 上半分の左半分をクリックすると、下半分に白い背景

に黒く Hello World と表示される。

� 上半分の右半分をクリックすると、下半分に黒い背景

に黄色い円と白い四角が表示される。

8/57

プログラムの設計方針

� flagという整数型の変数を宣言

� クリックしたときに実行される mousePressed では...

� クリックされた場所によって、0か1の、どちらかの値

を flag に保存する。

� その後、repaint を実行する。

結果、paintも実行される。

� paint では...

� flagの値に従って、下に描画を行う。

同じ事ができれば、他の方法でも構いません

Page 5: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

5

9/57

サンプルプログラム[1/4]import java.applet.Applet;import java.applet.Applet;import java.applet.Applet;import java.applet.Applet;import java.import java.import java.import java.awtawtawtawt.*;.*;.*;.*;import java.import java.import java.import java.awtawtawtawt.event.*;.event.*;.event.*;.event.*;/* <applet code="JavaApplet10t.class" width=200 height=400width=200 height=400width=200 height=400width=200 height=400></applet>*/public class JavaApplet10t extends Applet implements implements implements implements MouseListenerMouseListenerMouseListenerMouseListener{int x=10,y=10;intintintint flag=0;flag=0;flag=0;flag=0;public void init(){addMouseListeneraddMouseListeneraddMouseListeneraddMouseListener(this);(this);(this);(this);}import java.applet.Applet;import java.applet.Applet;import java.applet.Applet;import java.applet.Applet;import java.import java.import java.import java.awtawtawtawt.*;.*;.*;.*;import java.import java.import java.import java.awtawtawtawt.event.*;.event.*;.event.*;.event.*;/* <applet code="JavaApplet10t.class" width=200 height=400width=200 height=400width=200 height=400width=200 height=400></applet>*/public class JavaApplet10t extends Applet implements implements implements implements MouseListenerMouseListenerMouseListenerMouseListener{int x=10,y=10;intintintint flag=0;flag=0;flag=0;flag=0;public void init(){addMouseListeneraddMouseListeneraddMouseListeneraddMouseListener(this);(this);(this);(this);}

必要なパッケージをimport

マウスを使うので、MounseListenerを実装マウス関係のイベントを検知するように

200x400のサイズflagを宣言

10/57

サンプルプログラム[2/4]public void paint(Graphics g){if(flag==0){if(flag==0){if(flag==0){if(flag==0){g.g.g.g.setColorsetColorsetColorsetColor(Color.white);(Color.white);(Color.white);(Color.white);g.g.g.g.fillRectfillRectfillRectfillRect(0,200,200,400);(0,200,200,400);(0,200,200,400);(0,200,200,400);g.g.g.g.setColorsetColorsetColorsetColor(Color.black);(Color.black);(Color.black);(Color.black);g.g.g.g.drawStringdrawStringdrawStringdrawString("Hello World",30,240);("Hello World",30,240);("Hello World",30,240);("Hello World",30,240);}else if(flag==1){}else if(flag==1){}else if(flag==1){}else if(flag==1){g.g.g.g.setColorsetColorsetColorsetColor(Color.black);(Color.black);(Color.black);(Color.black);g.g.g.g.fillRectfillRectfillRectfillRect(0,200,200,400);(0,200,200,400);(0,200,200,400);(0,200,200,400);g.g.g.g.setColorsetColorsetColorsetColor(Color.yellow);(Color.yellow);(Color.yellow);(Color.yellow);g.g.g.g.drawArcdrawArcdrawArcdrawArc(20,220,160,160,0,360);(20,220,160,160,0,360);(20,220,160,160,0,360);(20,220,160,160,0,360);g.g.g.g.setColorsetColorsetColorsetColor(Color.white);(Color.white);(Color.white);(Color.white);g.g.g.g.drawRectdrawRectdrawRectdrawRect(20,220,160,160);(20,220,160,160);(20,220,160,160);(20,220,160,160);}}}}}

public void paint(Graphics g){if(flag==0){if(flag==0){if(flag==0){if(flag==0){g.g.g.g.setColorsetColorsetColorsetColor(Color.white);(Color.white);(Color.white);(Color.white);g.g.g.g.fillRectfillRectfillRectfillRect(0,200,200,400);(0,200,200,400);(0,200,200,400);(0,200,200,400);g.g.g.g.setColorsetColorsetColorsetColor(Color.black);(Color.black);(Color.black);(Color.black);g.g.g.g.drawStringdrawStringdrawStringdrawString("Hello World",30,240);("Hello World",30,240);("Hello World",30,240);("Hello World",30,240);}else if(flag==1){}else if(flag==1){}else if(flag==1){}else if(flag==1){g.g.g.g.setColorsetColorsetColorsetColor(Color.black);(Color.black);(Color.black);(Color.black);g.g.g.g.fillRectfillRectfillRectfillRect(0,200,200,400);(0,200,200,400);(0,200,200,400);(0,200,200,400);g.g.g.g.setColorsetColorsetColorsetColor(Color.yellow);(Color.yellow);(Color.yellow);(Color.yellow);g.g.g.g.drawArcdrawArcdrawArcdrawArc(20,220,160,160,0,360);(20,220,160,160,0,360);(20,220,160,160,0,360);(20,220,160,160,0,360);g.g.g.g.setColorsetColorsetColorsetColor(Color.white);(Color.white);(Color.white);(Color.white);g.g.g.g.drawRectdrawRectdrawRectdrawRect(20,220,160,160);(20,220,160,160);(20,220,160,160);(20,220,160,160);}}}}}

flagの値に従って、描画を行う下半分を白く塗り、Hellow World を表示下半分を黒く塗り、四角と円を表示

Page 6: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

6

11/57

サンプルプログラム[3/4]public void mousePressed(MouseEvent me){x=me.x=me.x=me.x=me.getXgetXgetXgetX();();();();y=me.y=me.y=me.y=me.getYgetYgetYgetY();();();();if((y>=0)&&(y<=200)){if((y>=0)&&(y<=200)){if((y>=0)&&(y<=200)){if((y>=0)&&(y<=200)){if((x>=0)&&(x<100)){if((x>=0)&&(x<100)){if((x>=0)&&(x<100)){if((x>=0)&&(x<100)){flag=0;flag=0;flag=0;flag=0;}else if((x>=100)&&(x<200)){}else if((x>=100)&&(x<200)){}else if((x>=100)&&(x<200)){}else if((x>=100)&&(x<200)){flag=1;flag=1;flag=1;flag=1;}}}}}}}}repaint();repaint();repaint();repaint();}

public void mousePressed(MouseEvent me){x=me.x=me.x=me.x=me.getXgetXgetXgetX();();();();y=me.y=me.y=me.y=me.getYgetYgetYgetY();();();();if((y>=0)&&(y<=200)){if((y>=0)&&(y<=200)){if((y>=0)&&(y<=200)){if((y>=0)&&(y<=200)){if((x>=0)&&(x<100)){if((x>=0)&&(x<100)){if((x>=0)&&(x<100)){if((x>=0)&&(x<100)){flag=0;flag=0;flag=0;flag=0;}else if((x>=100)&&(x<200)){}else if((x>=100)&&(x<200)){}else if((x>=100)&&(x<200)){}else if((x>=100)&&(x<200)){flag=1;flag=1;flag=1;flag=1;}}}}}}}}repaint();repaint();repaint();repaint();}クリック時のマウスの座標を保存 クリックした場所に応じた値に、

flagを設定クリックした場所に応じた値に、flagを設定

クリックした場所が下半分か否かを判定クリックした場所が右側か左側かを判定

12/57

サンプルプログラム[4/4]public void mouseEntered(MouseEvent me){}public void mouseExited(MouseEvent me){}public void mouseReleased(MouseEvent me){}public void mouseClicked(MouseEvent me){}}

public void mouseEntered(MouseEvent me){}public void mouseExited(MouseEvent me){}public void mouseReleased(MouseEvent me){}public void mouseClicked(MouseEvent me){}}残りの4つのメソッドをオーバーライド

Page 7: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

7

13/57

AWT

14/57

Javaとアプレット� Javaには、GUIを作るのに便利なクラスファイルやイン

ターフェイスが準備されています。

� GUIに使用されるボタンやダイアログは、すべてインス

タンス(オブジェクト)として扱われます。

� AWTとSwingがあります。

� AWTは、Javaに古くからあるものです。

あまり効率よく動いてはくれません。

� SwingはAWTの欠点とかを改善するべく作られたも

のです。

今回はAWTを、次回はSwingをやります

Page 8: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

8

15/57

基本的な流れ

� 次のような手順を踏みます。

1. 適切なインターフェースを実装する

2. 適切なインスタンスを宣言する

3. インスタンスを登録する

4. インスタンスに何らかのアクションが行われたときに、

ある動作を行いたいなら

1. Javaがそのアクションを関知するようにする

(リスナ登録する)

2. そのアクションが行われたときに、何をするか

を記述する

16/57

用意されているもの

� 次のようなものが利用できます。

� ラベル

� ボタン

� テキストフィールド

� チェックボックス

� チェックボックスグループ(ラジオボタン)

� キャンバス

� リスト

� チョイス

Page 9: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

9

17/57

ラベル その1

� ラベルとは...

� 文字列を画面に表示します。

� インターフェース

� なし

� リスナ登録

� なし

� クラス

� Label

18/57

ラベル その2� インスタンス生成時に、文字列を指定します。

この文字列の長さが、このインスタンスが持てる文字

列の最大の長さになります。

� クラス Label のメソッド

� setText(String ss)

� そのインスタンスに文字列ssを設定します。

� getText()

� そのインスタンスの持っている文字列を返し

ます。

Label インスタンス名 = new Label("文字列");Label インスタンス名 = new Label("文字列");

Page 10: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

10

19/57

サンプルプログラムimport java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11a.class" width=200 height=400></applet>*/public class Sample11a extends Applet{Label lb1 = new Label("Sample11a");Label lb1 = new Label("Sample11a");Label lb1 = new Label("Sample11a");Label lb1 = new Label("Sample11a");String ss;public void init(){add(lb1);add(lb1);add(lb1);add(lb1);lb1.lb1.lb1.lb1.setTextsetTextsetTextsetText("Test");("Test");("Test");("Test");ss = lb1.lb1.lb1.lb1.getTextgetTextgetTextgetText();();();();add(lb1);} }

import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11a.class" width=200 height=400></applet>*/public class Sample11a extends Applet{Label lb1 = new Label("Sample11a");Label lb1 = new Label("Sample11a");Label lb1 = new Label("Sample11a");Label lb1 = new Label("Sample11a");String ss;public void init(){add(lb1);add(lb1);add(lb1);add(lb1);lb1.lb1.lb1.lb1.setTextsetTextsetTextsetText("Test");("Test");("Test");("Test");ss = lb1.lb1.lb1.lb1.getTextgetTextgetTextgetText();();();();add(lb1);} }インスタンスを生成インスタンスを登録メソッドは、普通に、インスタンス名.メソッド名で使用。

20/57

ボタン その1

� ボタンとは...

� 押すことができるボタンを作ります。

� インターフェース

� ActionListener

� クラス

� Button

� リスナ登録

� addActionListener(インスタンス名);

� 押されたときに呼び出されるメソッド

� actionPerformed(ActionEvent e)

Page 11: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

11

21/57

ボタン その2� インスタンス生成時に、文字列を指定します。

� ボタンが押されたことをJavaが検知するに次が必要。

� ボタンが押されると、actionPerformed が実行されます。

複数のボタンのインスタンスがあっても、

actionPerformed は1つだけです。

� どのボタンが押されたかは、 ActionEventのオブジェク

トのメソッド getSource()で知ることができます。

Button インスタンス名 = new Button("表示する文字列");Button インスタンス名 = new Button("表示する文字列");

インスタンス名.addActionListener(this);インスタンス名.addActionListener(this);

22/57

サンプルプログラム [1/2]import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11b.class" width=200 height=400></applet>*/public class Sample11b extends Applet implements implements implements implements ActionListenerActionListenerActionListenerActionListener{Button bt1 = new Button("Button 1");Button bt1 = new Button("Button 1");Button bt1 = new Button("Button 1");Button bt1 = new Button("Button 1");Button bt2 = new Button("Button 2");Button bt2 = new Button("Button 2");Button bt2 = new Button("Button 2");Button bt2 = new Button("Button 2");Label lb1 = new Label("Sample11b");public void init(){bt1.bt1.bt1.bt1.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);bt2.bt2.bt2.bt2.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);add(bt1);add(bt1);add(bt1);add(bt1);add(bt2);add(bt2);add(bt2);add(bt2);add(lb1);}

import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11b.class" width=200 height=400></applet>*/public class Sample11b extends Applet implements implements implements implements ActionListenerActionListenerActionListenerActionListener{Button bt1 = new Button("Button 1");Button bt1 = new Button("Button 1");Button bt1 = new Button("Button 1");Button bt1 = new Button("Button 1");Button bt2 = new Button("Button 2");Button bt2 = new Button("Button 2");Button bt2 = new Button("Button 2");Button bt2 = new Button("Button 2");Label lb1 = new Label("Sample11b");public void init(){bt1.bt1.bt1.bt1.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);bt2.bt2.bt2.bt2.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);add(bt1);add(bt1);add(bt1);add(bt1);add(bt2);add(bt2);add(bt2);add(bt2);add(lb1);} インスタンスを生成

インスタンスを登録ボタンが押されたことを検知するようにするインターフェイス ActionListener を実装

Page 12: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

12

23/57

サンプルプログラム [2/2]public voidpublic voidpublic voidpublic void actionPerformedactionPerformedactionPerformedactionPerformed((((ActionEventActionEventActionEventActionEvent e){e){e){e){if(e.if(e.if(e.if(e.getSourcegetSourcegetSourcegetSource() == bt1){() == bt1){() == bt1){() == bt1){lb1.setText("Bottun 01");}else if(e.}else if(e.}else if(e.}else if(e.getSourcegetSourcegetSourcegetSource() == bt2){() == bt2){() == bt2){() == bt2){lb1.setText("Bottun 02");}}}}}}}}} public voidpublic voidpublic voidpublic void actionPerformedactionPerformedactionPerformedactionPerformed((((ActionEventActionEventActionEventActionEvent e){e){e){e){if(e.if(e.if(e.if(e.getSourcegetSourcegetSourcegetSource() == bt1){() == bt1){() == bt1){() == bt1){lb1.setText("Bottun 01");}else if(e.}else if(e.}else if(e.}else if(e.getSourcegetSourcegetSourcegetSource() == bt2){() == bt2){() == bt2){() == bt2){lb1.setText("Bottun 02");}}}}}}}}} ボタンが押されたときに行うことを書く

どのボタンが押されたかで条件分岐

24/57

テキストフィールド その1

� テキストフィールドとは...

� テキストを入力できる場所です

� インターフェース

� ActionListener

� クラス

� TextField

� リスナ登録

� addActionListener(インスタンス名);

� リターンが押されたときに呼び出されるメソッド

� actionPerformed(ActionEvent e)

Page 13: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

13

25/57

テキストフィールド その2� インスタンス生成時は次のようにします。

TextField インスタンス名 = new TextField("文字列");TextField インスタンス名 = new TextField("文字列");

TextField インスタンス名 = new TextField(値);TextField インスタンス名 = new TextField(値);

TextField インスタンス名 = new TextField("文字列",値);TextField インスタンス名 = new TextField("文字列",値);

この場合、文字列の長さ文のサイズで表示されます。

また、文字列が最初に入った状態になります。

この場合、値のサイズで表示されます

この場合、値のサイズで表示されます。

また、文字列が最初に入った状態になります。

26/57

テキストフィールド その3� リターンキーが押されたことをJavaが検知するに次のリ

スナ登録が必要。

� テキストフィールド内でリターンキーが押されると、

actionPerformed が実行されます。複数のインスタンス

があっても、 actionPerformed は1つだけです。

� どのテキストフィールド内でリターンキーが押されたか

は、 ActionEventのオブジェクトのメソッド getSource()

で知ることができます。

インスタンス名.addActionListener(this);インスタンス名.addActionListener(this);

Page 14: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

14

27/57

テキストフィールド その4� クラス TextFieldのメソッド

� setText(String ss)

� そのインスタンスに文字列 ss を設定します。

� getText()

� そのインスタンスの持っている文字列を返し

ます。

28/57

サンプルプログラム [1/2]import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11c.class" width=200 height=200></applet>*/public class Sample11c extends Applet implements implements implements implements ActionListenerActionListenerActionListenerActionListener{TextFieldTextFieldTextFieldTextField tf1 = new tf1 = new tf1 = new tf1 = new TextFieldTextFieldTextFieldTextField("("("("TextFieldTextFieldTextFieldTextField",20);",20);",20);",20);Label lb1 = new Label("Sample11c");public void init(){tf1.tf1.tf1.tf1.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);add(tf1);add(tf1);add(tf1);add(tf1);add(lb1);}

import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11c.class" width=200 height=200></applet>*/public class Sample11c extends Applet implements implements implements implements ActionListenerActionListenerActionListenerActionListener{TextFieldTextFieldTextFieldTextField tf1 = new tf1 = new tf1 = new tf1 = new TextFieldTextFieldTextFieldTextField("("("("TextFieldTextFieldTextFieldTextField",20);",20);",20);",20);Label lb1 = new Label("Sample11c");public void init(){tf1.tf1.tf1.tf1.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);add(tf1);add(tf1);add(tf1);add(tf1);add(lb1);} インスタンスを生成インスタンスを登録 テキストフィールド内でリターンが押されたことを検知するように

インターフェイス ActionListener を実装

Page 15: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

15

29/57

サンプルプログラム [2/2]public voidpublic voidpublic voidpublic void actionPerformedactionPerformedactionPerformedactionPerformed((((ActionEventActionEventActionEventActionEvent e){e){e){e){if(e.if(e.if(e.if(e.getSourcegetSourcegetSourcegetSource() == tf1){() == tf1){() == tf1){() == tf1){lb1.setText(tf1.tf1.tf1.tf1.getTextgetTextgetTextgetText()()()());tf1.tf1.tf1.tf1.setTextsetTextsetTextsetText("Input here");("Input here");("Input here");("Input here");}}}}}}}}} public voidpublic voidpublic voidpublic void actionPerformedactionPerformedactionPerformedactionPerformed((((ActionEventActionEventActionEventActionEvent e){e){e){e){if(e.if(e.if(e.if(e.getSourcegetSourcegetSourcegetSource() == tf1){() == tf1){() == tf1){() == tf1){lb1.setText(tf1.tf1.tf1.tf1.getTextgetTextgetTextgetText()()()());tf1.tf1.tf1.tf1.setTextsetTextsetTextsetText("Input here");("Input here");("Input here");("Input here");}}}}}}}}}

テキストフィールド内でリターンが押されたときに行うことを書くどのテキストフィールドでリターンが押されたかで条件分岐

30/57

チェックボックス その1

� チェックボックスとは...

� 四角いボックスにチェックを入れるものです

� インターフェース

� ItemListener

� クラス

� Checkbox

� リスナ登録

� addItemListener(インスタンス名);

� チェックが入れられたときに呼び出されるメソッド

� itemStateChanged(ItemEvent e)

Page 16: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

16

31/57

チェックボックス その2� インスタンス生成時は次のようにします。

� チェックボックスが沢山必要なときは、その数だけ、イ

ンスタンスを生成することになります。

Checkbox インスタンス名 = new Checkbox("文字列");Checkbox インスタンス名 = new Checkbox("文字列");

32/57

チェックボックス その3� チェックボックスの状態が変わったことをJavaが検知す

るには、次のリスナ登録が必要です。

� チェックボックスがクリックされると、itemStateChanged

が実行されます。複数のインスタンスがあっても、

itemStateChangedは1つだけです。

� どのボタンが押されたかは、 ItemEventのオブジェクト

のメソッド getSource()で知ることができます。

インスタンス名.addItemListener(this);インスタンス名.addItemListener(this);

Page 17: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

17

33/57

チェックボックス その4� クラス Checkbox のメソッド

� setState(Boolean)

� そのインスタンスの持つ状態を設定します。

� 引数として true か false を渡します。

� getText()

� そのインスタンスの状態を返します。

チェックが入っていれば true を、無ければ

false を返します。

34/57

サンプルプログラム [1/2]import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11d.class" width=200 height=200></applet>*/public class Sample11d extends Applet implements implements implements implements ItemListenerItemListenerItemListenerItemListener{Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb2 = new Checkbox("Check Box 02");Checkbox cb2 = new Checkbox("Check Box 02");Checkbox cb2 = new Checkbox("Check Box 02");Checkbox cb2 = new Checkbox("Check Box 02");Label lb1 = new Label("Sample11d");public void init(){cb1.cb1.cb1.cb1.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);cb2.cb2.cb2.cb2.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);add(cb1);add(cb1);add(cb1);add(cb1);add(cb2);add(cb2);add(cb2);add(cb2);add(lb1);}

import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11d.class" width=200 height=200></applet>*/public class Sample11d extends Applet implements implements implements implements ItemListenerItemListenerItemListenerItemListener{Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb1 = new Checkbox("Check Box 01");Checkbox cb2 = new Checkbox("Check Box 02");Checkbox cb2 = new Checkbox("Check Box 02");Checkbox cb2 = new Checkbox("Check Box 02");Checkbox cb2 = new Checkbox("Check Box 02");Label lb1 = new Label("Sample11d");public void init(){cb1.cb1.cb1.cb1.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);cb2.cb2.cb2.cb2.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);add(cb1);add(cb1);add(cb1);add(cb1);add(cb2);add(cb2);add(cb2);add(cb2);add(lb1);} インスタンスを生成

インスタンスを登録 チェックボックスの状態の変更を検知するようにインターフェイス ItemListener を実装

Page 18: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

18

35/57

サンプルプログラム [2/2]public void public void public void public void itemStateChangeditemStateChangeditemStateChangeditemStateChanged((((ItemEventItemEventItemEventItemEvent e){e){e){e){lb1.setText(cb1.cb1.cb1.cb1.getStategetStategetStategetState()()()() + "-" + cb2.cb2.cb2.cb2.getStategetStategetStategetState()()()());}}}}} public void public void public void public void itemStateChangeditemStateChangeditemStateChangeditemStateChanged((((ItemEventItemEventItemEventItemEvent e){e){e){e){lb1.setText(cb1.cb1.cb1.cb1.getStategetStategetStategetState()()()() + "-" + cb2.cb2.cb2.cb2.getStategetStategetStategetState()()()());}}}}} チェックボックスの状態が変わったときに行うことを書く

36/57

チェックボックスグループ その1

� チェックボックスグループとは...

� どれか1つにのみチェックできるチェックボックスです

� インターフェース

� ItemListener

� クラス

� CheckboxGroup

� リスナ登録

� addItemListener(インスタンス名);

� チェックが入れられたときに呼び出されるメソッド

� itemStateChanged(ItemEvent e)

Page 19: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

19

37/57

チェックボックスグループその2� インスタンス生成時は次のようにします。

� チェックボックスグループは、複数のチェックボックスを

グループに登録することにより作成します。

� チェックボックスのインスタンス生成時に、どのチェック

ボックスグループに属するのかを宣言します。

CheckboxGroup インスタンス名 = new CheckboxGroup();CheckboxGroup インスタンス名 = new CheckboxGroup();

Checkbox インスタンス名 =

new Checkbox("文字列",初期状態,グループ名);

Checkbox インスタンス名 =

new Checkbox("文字列",初期状態,グループ名);

初期状態にはtrueかfalseを指定します。

trueな状態はグループ内に1つだけ許されます。

38/57

チェックボックスグループその3� チェックボックスグループはリスナ登録しません。

代わりに、チェックボックスをリスナ登録しておきます。

� チェックボックスがクリックされると、itemStateChanged

が実行されます。複数のインスタンスがあっても、

itemStateChangedは1つだけです。

Page 20: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

20

39/57

サンプルプログラム [1/2]import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11e.class" width=200 height=200></applet>*/public class Sample11e extends Applet implements implements implements implements ItemListenerItemListenerItemListenerItemListener{CheckboxGroup cbg1 = new CheckboxGroup();Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Label lb1 = new Label("Sample11d");public void init(){cb1.cb1.cb1.cb1.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);cb2.cb2.cb2.cb2.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);add(cb1);add(cb1);add(cb1);add(cb1);add(cb2);add(cb2);add(cb2);add(cb2);add(lb1);}

import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11e.class" width=200 height=200></applet>*/public class Sample11e extends Applet implements implements implements implements ItemListenerItemListenerItemListenerItemListener{CheckboxGroup cbg1 = new CheckboxGroup();Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb1 = new Checkbox("Check Box 01",true,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Checkbox cb2 = new Checkbox("Check Box 02",false,cbg1);Label lb1 = new Label("Sample11d");public void init(){cb1.cb1.cb1.cb1.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);cb2.cb2.cb2.cb2.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);add(cb1);add(cb1);add(cb1);add(cb1);add(cb2);add(cb2);add(cb2);add(cb2);add(lb1);} インスタンスを生成

インスタンスを登録 チェックボックスの状態の変更を検知するようにインターフェイス ItemListener を実装

40/57

サンプルプログラム [2/2]public void public void public void public void itemStateChangeditemStateChangeditemStateChangeditemStateChanged((((ItemEventItemEventItemEventItemEvent e){e){e){e){if(cb1.getState() == true){lb1.setText("Test 01");}else if(cb2.getState() == true){lb1.setText("Test 02");}}}}}} public void public void public void public void itemStateChangeditemStateChangeditemStateChangeditemStateChanged((((ItemEventItemEventItemEventItemEvent e){e){e){e){if(cb1.getState() == true){lb1.setText("Test 01");}else if(cb2.getState() == true){lb1.setText("Test 02");}}}}}} チェックボックスの状態が変化したときに行うことを書く

Page 21: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

21

41/57

リスト その1

� リストとは...

� 一覧からどれか一つを選択するものです。

� インターフェース

� ActionListener

� クラス

� List

� リスナ登録

� addActionListener(インスタンス名);

� ある項目がダブルクリックときに呼び出されるメソッド

� actionPerformed(ActionEvent e)

42/57

リスト その2� インスタンス生成時は次のようにします。

引数として、一度に表示する項目数を指定します。

� リスト内に表示する項目は、Listクラスのメソッド add を

使って追加していきます。

� 一度に表示できる項目数よりも、addで追加された項目

数の方が多い場合は、スクロールバーが出ます。

List インスタンス名 = new List(値);List インスタンス名 = new List(値);

Page 22: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

22

43/57

リスト その3� ダブルクリックされたことをJavaが検知するのには次の

リスナ登録が必要です。

� 項目がダブルクリックされると、actionPerformed が実

行されます。複数のインスタンスがあっても、

actionPerformed は1つだけです。

� どのリストがダブルクリックされたかは、 ActionEvent

のオブジェクトのメソッド getSource()で知ることができま

す。

インスタンス名.addActionListener(this);インスタンス名.addActionListener(this);

44/57

リスト その4� クラス List のメソッド

� add("文字列")

� リストに文字列を項目として追加します。

� getSelectedItem()

� 選択された項目を返します。

Page 23: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

23

45/57

サンプルプログラム [1/2]import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11f.class" width=200 height=200></applet>*/public class Sample11f extends Applet implements implements implements implements ActionListenerActionListenerActionListenerActionListener{List ls1 = new List(3);List ls1 = new List(3);List ls1 = new List(3);List ls1 = new List(3);Label lb1 = new Label("Sample11d");public void init(){ls1.ls1.ls1.ls1.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);ls1.add("Test 001");ls1.add("Test 001");ls1.add("Test 001");ls1.add("Test 001");ls1.add("Test 002");ls1.add("Test 002");ls1.add("Test 002");ls1.add("Test 002");ls1.add("Test 003");ls1.add("Test 003");ls1.add("Test 003");ls1.add("Test 003");ls1.add("Test 004");ls1.add("Test 004");ls1.add("Test 004");ls1.add("Test 004");ls1.add("Test 005");ls1.add("Test 005");ls1.add("Test 005");ls1.add("Test 005");ls1.add("Test 006");ls1.add("Test 006");ls1.add("Test 006");ls1.add("Test 006");

import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11f.class" width=200 height=200></applet>*/public class Sample11f extends Applet implements implements implements implements ActionListenerActionListenerActionListenerActionListener{List ls1 = new List(3);List ls1 = new List(3);List ls1 = new List(3);List ls1 = new List(3);Label lb1 = new Label("Sample11d");public void init(){ls1.ls1.ls1.ls1.addActionListeneraddActionListeneraddActionListeneraddActionListener(this);(this);(this);(this);ls1.add("Test 001");ls1.add("Test 001");ls1.add("Test 001");ls1.add("Test 001");ls1.add("Test 002");ls1.add("Test 002");ls1.add("Test 002");ls1.add("Test 002");ls1.add("Test 003");ls1.add("Test 003");ls1.add("Test 003");ls1.add("Test 003");ls1.add("Test 004");ls1.add("Test 004");ls1.add("Test 004");ls1.add("Test 004");ls1.add("Test 005");ls1.add("Test 005");ls1.add("Test 005");ls1.add("Test 005");ls1.add("Test 006");ls1.add("Test 006");ls1.add("Test 006");ls1.add("Test 006");インスタンスを生成チェックボックスの状態の変更を検知するように

インターフェイス ActionListener を実装項目を追加

46/57

サンプルプログラム [2/2]add(ls1);add(ls1);add(ls1);add(ls1);add(lb1);} public void public void public void public void actionPerformedactionPerformedactionPerformedactionPerformed((((ActionEventActionEventActionEventActionEvent e){e){e){e){lb1.setText(ls1.ls1.ls1.ls1.getSelectedItemgetSelectedItemgetSelectedItemgetSelectedItem()()()());}}}}} add(ls1);add(ls1);add(ls1);add(ls1);add(lb1);} public void public void public void public void actionPerformedactionPerformedactionPerformedactionPerformed((((ActionEventActionEventActionEventActionEvent e){e){e){e){lb1.setText(ls1.ls1.ls1.ls1.getSelectedItemgetSelectedItemgetSelectedItemgetSelectedItem()()()());}}}}}

チェックボックスの状態が変化したときに行うことを書く

インスタンスを登録

Page 24: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

24

47/57

チョイス その1

� チョイスとは...

� 一覧からどれか一つを選択するものです。

� インターフェース

� ItemListener

� クラス

� Choice

� リスナ登録

� addItermListener(インスタンス名);

� ある項目が選択ときに呼び出されるメソッド

� itemStateChanged(ItemEvent e)

48/57

チョイス その2� インスタンス生成時は次のようにします。

� リスト内に表示する項目は、Choiceクラスのメソッド add

を使って追加していきます。

� 一度に表示できる項目数は1つです。

プルダウンメニューにより、項目を選択します。

Choice インスタンス名 = new Choice();Choice インスタンス名 = new Choice();

Page 25: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

25

49/57

チョイス その3� 項目が選択されたことをJavaが検知するためには、次の

リスナ登録が必要です。

� 選択された項目が変わったことが検知されると、

itemStateChangedが実行されます。複数のインスタンス

があっても、 itemStateChangedは1つだけです。

� どのチョイスの状態が変更されたかが押されたかは、

ItemEventのオブジェクトのメソッド getSource()で知るこ

とができます。

インスタンス名.addItemListener(this);インスタンス名.addItemListener(this);

50/57

チョイス その4� クラス Choice のメソッド

� add("文字列")

� リストに文字列を項目として追加します。

� getSelectedItem()

� 選択された項目を返します。

Page 26: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

26

51/57

サンプルプログラム [1/2]import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11g.class" width=200 height=200></applet>*/public class Sample11g extends Applet implements implements implements implements ItemListenerItemListenerItemListenerItemListener{Choice ch1 = new Choice();Choice ch1 = new Choice();Choice ch1 = new Choice();Choice ch1 = new Choice();Label lb1 = new Label("Sample11d");public void init(){ch1.ch1.ch1.ch1.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);ch1.add("Test 001");ch1.add("Test 001");ch1.add("Test 001");ch1.add("Test 001");ch1.add("Test 002");ch1.add("Test 002");ch1.add("Test 002");ch1.add("Test 002");ch1.add("Test 003"); ch1.add("Test 003"); ch1.add("Test 003"); ch1.add("Test 003"); add(ch1);add(ch1);add(ch1);add(ch1);add(lb1);}

import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11g.class" width=200 height=200></applet>*/public class Sample11g extends Applet implements implements implements implements ItemListenerItemListenerItemListenerItemListener{Choice ch1 = new Choice();Choice ch1 = new Choice();Choice ch1 = new Choice();Choice ch1 = new Choice();Label lb1 = new Label("Sample11d");public void init(){ch1.ch1.ch1.ch1.addItemListeneraddItemListeneraddItemListeneraddItemListener(this);(this);(this);(this);ch1.add("Test 001");ch1.add("Test 001");ch1.add("Test 001");ch1.add("Test 001");ch1.add("Test 002");ch1.add("Test 002");ch1.add("Test 002");ch1.add("Test 002");ch1.add("Test 003"); ch1.add("Test 003"); ch1.add("Test 003"); ch1.add("Test 003"); add(ch1);add(ch1);add(ch1);add(ch1);add(lb1);} インスタンスを生成チェックボックスの状態の変更を検知するように

インターフェイス ItemListener を実装項目を追加 インスタンスを登録

52/57

サンプルプログラム [2/2]public void public void public void public void itemStateChangeditemStateChangeditemStateChangeditemStateChanged((((ItemEventItemEventItemEventItemEvent e){e){e){e){lb1.setText(ch1.ch1.ch1.ch1.getSelectedItemgetSelectedItemgetSelectedItemgetSelectedItem()()()());}}}}} public void public void public void public void itemStateChangeditemStateChangeditemStateChangeditemStateChanged((((ItemEventItemEventItemEventItemEvent e){e){e){e){lb1.setText(ch1.ch1.ch1.ch1.getSelectedItemgetSelectedItemgetSelectedItemgetSelectedItem()()()());}}}}} 選択されている項目が変化したときに行うことを書く

Page 27: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

27

53/57

キャンバス その1

� キャンバスとは...

� 描画することができるフィールドです。

� インターフェース

� なし

� リスナ登録

� なし

� クラス

� Canvas

54/57

キャンバス その2� 実際にキャンバスを利用するときは、

1. クラスCanvasをスーパークラスにもつサブクラスを

作り、

2. そのインスタンスを生成

します。

� 描画は、サブクラスを作るときに paint()メソッドをオー

バーライドすることで行います。

Page 28: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

28

55/57

ラベル その2� クラス Cancasのメソッド

� paint(Graphics g)

� 普通、サブクラスでオーバーライドします。

� setSize(int width, int height)

� キャンバスのサイズを設定します。

width の幅と hieght の高さになります。

56/57

サンプルプログラム [1/2]import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11h.class" width=200 height=200></applet>*/class TestCanvas extends Canvasextends Canvasextends Canvasextends Canvas{public void paint(Graphics g){g.drawArc(20,20,160,160,0,360);g.drawRect(20,20,160,160); }}import java.applet.Applet;import java.awt.*;import java.awt.event.*;/* <applet code="Sample11h.class" width=200 height=200></applet>*/class TestCanvas extends Canvasextends Canvasextends Canvasextends Canvas{public void paint(Graphics g){g.drawArc(20,20,160,160,0,360);g.drawRect(20,20,160,160); }}

Canvasをスーパークラスに持つサブクラスを作るpaintを書く

Page 29: プログラミング言語3s-okubo/class/java07/...1 1 プログラミング言語3 第11 回(2007 年12 月10 日) 2/57 今日の配布物 片面の用紙1枚 今日の課題が書かれています。本日の出欠を兼ねています

29

57/57

サンプルプログラム [1/2]public class Sample11h extends Applet{TestCanvasTestCanvasTestCanvasTestCanvas cv1 = new cv1 = new cv1 = new cv1 = new TestCanvasTestCanvasTestCanvasTestCanvas();();();();public void init(){cv1.cv1.cv1.cv1.setSizesetSizesetSizesetSize(100,100);(100,100);(100,100);(100,100);add(cv1);add(cv1);add(cv1);add(cv1);} }public class Sample11h extends Applet{TestCanvasTestCanvasTestCanvasTestCanvas cv1 = new cv1 = new cv1 = new cv1 = new TestCanvasTestCanvasTestCanvasTestCanvas();();();();public void init(){cv1.cv1.cv1.cv1.setSizesetSizesetSizesetSize(100,100);(100,100);(100,100);(100,100);add(cv1);add(cv1);add(cv1);add(cv1);} } インスタンスを生成インスタンスを登録 インスタンスの表示サイズを設定