第 14 回独習 java ゼミ

33
第 14 第第第 Java 第第 第第第第第1~3 第第第 第第 第第

Upload: cedric-alston

Post on 01-Jan-2016

44 views

Category:

Documents


8 download

DESCRIPTION

第 14 回独習 Java ゼミ. セクション1~3 発表者 直江 宗紀. GraphicalUserInterface(GUI). グラフィカルユーザーインターフェイスとは グラフィカルな表示等による視覚的操作が出来る 操作はマウス等のポインティングデバイスが中心 コマンドライン上の操作がメインの CUI(Character-based User Interface) とは違う GUI ベースのプログラム 「イベントドリブン」である必要性. イベントドリブン. イベントドリブンとは ユーザーが操作をした時にプログラム処理 何も無ければ待機状態 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 14 回独習 Java ゼミ

第 14回独習 Java ゼミ

セクション1~3発表者直江 宗紀

Page 2: 第 14 回独習 Java ゼミ

GraphicalUserInterface(GUI)

グラフィカルユーザーインターフェイスとは グラフィカルな表示等による視覚的操作が出来る 操作はマウス等のポインティングデバイスが中心 コマンドライン上の操作がメインの

CUI(Character-based User Interface)とは違う

GUIベースのプログラム 「イベントドリブン」である必要性

Page 3: 第 14 回独習 Java ゼミ

イベントドリブン

イベントドリブンとは ユーザーが操作をした時にプログラム処理 何も無ければ待機状態 リアルタイム状態 (ポーリング )での欠点→ CPU処理資源を著しく欠いてしまう

単純な処理の流れ待機 イベント通知待ち 処理・実行

イベント通知の間は何もしない

Page 4: 第 14 回独習 Java ゼミ

代行イベントモデル(1)

イベントドリブンインターフェイス 定義する方法は数種類存在する イベントモデルにより特定のメカニズムが決まる 現在の JDKでは、代行イベントモデルが使われている

代行イベントモデル ユーザが操作した際にソースから、その操作を示すオブジェクトのイベントを生成し、イベントオブジェクトを一連のリスナ (イベント監視 )に送信する標準メカニズムのこと

Page 5: 第 14 回独習 Java ゼミ

ソース

ソース イベント (のオブジェクト )を生成する元 (資源 ) ソースの責任

リスナが特定のタイプのイベントに関する通知を登録・登録解除できるようにするメソッドを提供すること

イベント (のオブジェクト )の生成 登録されたリスナ全てにイベントを送信すること(イベントは、単一のリスナに対するユニキャストでも、複数のリスナに対するマルチキャストでも構わない)

Page 6: 第 14 回独習 Java ゼミ

イベント

イベント ソースにおける状態変更を表すオブジェクト ソースの状態変更とは→ユーザがアプレットに行った操作全般のこと

イベントの生成タイミング→ GUI内の要素に対して操作を行った時 ボタンを押す マウスをクリックする ウィンドウを閉じたりする・・・等

Page 7: 第 14 回独習 Java ゼミ

リスナ

リスナ イベント通知(イベントオブジェクトの送信)を受ける

リスナの責任 特定のイベントに関する通知を受け取ることを登録する そのタイプのイベントを受け取るインターフェイスを実装すること( implementsにより受け取るイベントを作る)

通知を受け取る必要が無くなった場合には登録を解除する

Page 8: 第 14 回独習 Java ゼミ

代行イベントモデル(2)

代行イベントモデルのモデル図

ソース

イベント

リスナ

リスナ

リスナ

Page 9: 第 14 回独習 Java ゼミ

代行イベントモデル(3)

イベントに関する情報をカプセル化 クラス java.awt.event.ActionEvent

→ソース、イベント、リスナを扱うためのメソッドが内包されている

オーバーライド無しでも明示的にやり取りが行われる

次章において、詳細に扱う

Page 10: 第 14 回独習 Java ゼミ

ソース実装メソッド

addTypeListener()メソッド public void addTypeListener(TypeListener el)

特定タイプのイベントリスナ (el)を複数登録 public void addTypeListener(TypeListener el)

throws TooManyListenersException 特定タイプのイベントリスナ( el)を一つ登録

removeTypeListener()メソッド public void removeTypeListener(TypeListener el)

特定タイプのイベント通知の登録を解除

Page 11: 第 14 回独習 Java ゼミ

イベント登録及び受け取りメソッド アクションイベント受け取りの登録または解除 void addActionListener(ActionListener al) void removeActionListener(ActionListener al)

al:リスナオブジェクトの参照 リスナは java.awt.event.ActionListenerインターフェースを実装しなければならない

アクションイベント受け取り void actionPerformed(actionEvent ae)

ae:アクションイベントの参照

Page 12: 第 14 回独習 Java ゼミ

イベントクラス

様々な GUI要素 Abstract Window Toolkit(AWT)

→ボタン、チェックボックス。スクロールバーなどの一連の標準コンポーネントを提供している

イベントクラス 各種タイプの AWTイベントを表す一連のクラスが用意

Page 13: 第 14 回独習 Java ゼミ

イベントオブジェクト

EventObject Objectを拡張したクラス java.utilパッケージに含む コンストラクタ

EventObject(Object src) 主なメソッド

Object getSouce() イベントを生成したオブジェクトを返す

Stng toString() イベントの等価の文字列を返す

Page 14: 第 14 回独習 Java ゼミ

AWTイベントクラス

AWTEventクラス 全ての AWTイベントクラスはこのクラスのサブクラス

java.awtパッケージに含まれる コンストラクタ

AWTEvent(Object source,int id) source:イベントを生成するオブジェクト id:イベントのタイプ

メソッド int getID()

イベントのタイプを返す String toString()

Page 15: 第 14 回独習 Java ゼミ

ComponentEvent クラス(1)

ComponentEventクラス AWTEventクラスを拡張したクラスの一つ 各種コンポーネントイベントのタイプの識別に使用する int型定数が定義される

コンストラクタ ComponentEvent(Conponent src,int type)

src:イベントを生成したオブジェクトの参照 type:イベントのタイプ

メソッド Component getComponent()

srcを生成したコンポーネントを返す

Page 16: 第 14 回独習 Java ゼミ

ComponentEvent クラス(2)

ComponentEventクラスの主な定数 COMPONENT_HIDDEN

コンポーネントが隠れた COMPONENT_MOVED

コンポーネントが移動した COMPONENT_RESIZED

コンポーネントのサイズが変更された COMPONENT_SHOWN

コンポーネントが表示可能になった

Page 17: 第 14 回独習 Java ゼミ

主なイベントクラス(1)

java.awt.eventに含まれる主なイベントクラス

イベント 生成される条件ActionEvent ボタンを押した時、リスト項目をダブルクリックした時、

メニュー項目を選択した時AdjustmentEvent スクロールバーを操作した時ComponentEvent コンポーネントが隠れた、移動した、サイズ変更された、

表示可能になった時ContainerEvent コンポーネントがコンテナに追加した、またはコンテナか

ら削除した時FocusEvent コンポーネントがキーボードフォーカスを取得した、また

は失った時InputEvent マウスイベントまたはキーイベントが発生した時

Page 18: 第 14 回独習 Java ゼミ

主なイベントクラス(2)

java.awt.eventに含まれる主なイベントクラス (続き )イベント 生成される条件ItemEvent チェックボックスまたはリスト項目をクリックした時、チョイ

スで選択を行った時、チェック可能メニュー項目を選択または選択解除した時

KeyEvent キーボードから入力を受け取った時MouseEvent マウスをドラックまたは移動した時、クリックした時、押した

時、話した時、その他、マウスをコンポーネントに入れた、またはコンポーネントから出した時

TextEvent テキストエリアまたはテキストフィールドの値を変更した時WindowEvent ウィンドウを活動化した時、閉じた時、非活動化した時、アイ

コン化解除した時、開いた時、終了した時

Page 19: 第 14 回独習 Java ゼミ

InputEvent クラス

InputEventクラス ComponentEventクラスのサブクラス KeyEvent、MouseEventをサブクラスに持つ Inputに関する情報を扱う場合に使用できる int型整数 (修飾子 )が定義されている ALT_MASK,CTRL_MASK,等

getModifiers()メソッド int getModifiers()

イベントの修飾子フラグを全て含む int型の値を返す

Page 20: 第 14 回独習 Java ゼミ

MouseEvent クラス(1)

MouseEventクラス InputEventクラスのサブクラス 主なコンストラクタ

MouseEvent(Component src,int type,long when,int modifiers,int x,int y,int clicks,boolean triggersPopup) src:生成したコンポーネントの参照 type:イベントタイプ modifiers:イベント発生時にどの修飾子が押されたか x,y:マウス座標 clicks:クリック回数 triggerPopup:ポップアップメニュー表示の可否

Page 21: 第 14 回独習 Java ゼミ

MouseEvent クラス(2)

マウスイベントのタイプ識別のための int型定数

定数 説明MOUSE_CLICKED マウスをクリックしたMOUSE_DRAGGED マウスをドラッグしたMOUSE_ENTERED マウスがコンポーネントに入ったMOUSE_EXITED マウスがコンポーネントから出たMOUSE_MOVED マウスを移動したMOUSE_PRESSED マウスを押したMOUSE_RELEASED マウスを放したMOUSE_WHEEL マウスのホイールを回した

Page 22: 第 14 回独習 Java ゼミ

MouseEvent クラス(3)

主なメソッド int getX(),int getY()

イベント発生時のマウス座標を返す Point getPoint()

java.awt.Pointクラスは座標のカプセル化をする インスタンス変数として x,yがある

void translatePoint(int x,int y) イベントの場所の変更

int getClickCount() イベント発生時のマウスクリック回数を返す

Page 23: 第 14 回独習 Java ゼミ

イベントリスナ(1)

java.util.EventListenerインターフェイス イベントクラスにより作られたイベントを処理する

それぞれのイベントクラスに対応したリスナインターフェイスがある

インターフェイスは全て java.awt.eventパッケージで宣言されている

Page 24: 第 14 回独習 Java ゼミ

イベントリスナ(2)

AWTイベントクラスに対応するリスナインターフェイスイベントクラス リスナインターフェイス

ActionEvent ActionListener

AdjustmentEvent AdjustmentListener

CompornentEvent CompornentListener

ContainerEvent ContainerListener

FocusEvent FocusListener

ItemEvent ItemListener

KeyEvent KeyListener

MouseEvent MouseListener,MouseMotionListener

MouseWheelEvent MouseWheelListener

TextEvent TextListener

WindowEvent WindowListener

Page 25: 第 14 回独習 Java ゼミ

MouseListener について(1)

イベント通知の登録及び解除 Componentクラスのメソッドを用いる

void addMouseListener(MouseListener ml) void addMouseMotionListener(MouseMotionListener mml)

それぞれのイベント通知を登録 (通知可にする ) void removeMouseListener(MouseListener ml) void removeMouseMotionListener(MouseMotionListener m

ml) それぞれのイベント通知登録を解除

MouseMotion ドラッグやポインタが動かされる時に起きるイベント

Page 26: 第 14 回独習 Java ゼミ

MouseListener について(2)

マウスイベントを受けるインターフェイスの実装 MouseListenerインターフェイスの場合 実装するメソッド

void mouseClicked(MouseEvent me) void mouseEntered(MouseEvent me) void mouseExited(MouseEvent me) void mousePressed(MouseEvent me) void mouseReleased(MouseEvent me)

Page 27: 第 14 回独習 Java ゼミ

MouseListener について(3)

マウスイベントを受けるインターフェイスの実装(続き) MouseMotionListenerインターフェイスの場合 実装するメソッド

void mouseDragged(MouseEvent me) void mouseMoved(MouseEvent me)

Page 28: 第 14 回独習 Java ゼミ

使用例(1)

イベントリスナを利用した時のプログラム例(1)import java.applet.*;import java.awt.*;import java.awt.event.*;/* <applet code="test1" width="200" height="200"></applet> */public class test1 extends Applet implements MouseListener{

public void init(){addMouseListener(this) ; }

public void mouseClicked(MouseEvent me){setBackground(Color.BLUE) ;repaint() ; }

(次ページに続く…)

Page 29: 第 14 回独習 Java ゼミ

使用例(2)

プログラム例 (続き )public void mouseEntered(MouseEvent me){

setBackground(Color.GREEN) ;repaint() ; }

public void mouseExited(MouseEvent me){setBackground(Color.RED) ;repaint() ; }

public void mousePressed(MouseEvent me){setBackground(Color.white) ;repaint() ; }

public void mouseReleased(MouseEvent me){setBackground(Color.YELLOW) ;repaint() ; }

}

Page 30: 第 14 回独習 Java ゼミ

使用例(3)

イベントリスナを利用した時のプログラム例(2)import java.applet.*;import java.awt.*;import java.awt.event.*;/* <applet code="test1" width="200" height="200"></applet> */public class test1 extends Applet implements MouseListener,MouseMotionListener{

Point p ;public void init(){

addMouseListener(this) ;addMouseMotionListener(this) ; }

public void mouseClicked(MouseEvent me){ }public void mouseEntered(MouseEvent me){ }public void mouseExited(MouseEvent me){ } 次ページ

に続く…

Page 31: 第 14 回独習 Java ゼミ

使用例(4) プログラム例 (続き )

public void mousePressed(MouseEvent me){p=me.getPoint() ;repaint() ; }

public void mouseReleased(MouseEvent me){p=null ;repaint() ; }

public void mouseDragged(MouseEvent me){p=me.getPoint() ;repaint() ; }

public void mouseMoved(MouseEvent me){ }public void paint(Graphics g){

if(p!=null){ int xc=getSize().width/2 ;int yc=getSize().height/2 ;g.drawLine(xc,yc,p.x,p.y) ; } }

}

Page 32: 第 14 回独習 Java ゼミ

演習問題

1. プログラム例(1)を参考にキーボードから入力されたキーを表示するプログラムを作成せよ。利用するリスナインターフェイスは KeyListener実装すべきメソッドはvoid keyPressed(KeyEvent ke)void keyReleased(KeyEvent ke)public void keyTyped(KeyEvent ke)の3つであるが、 KeyPressedメソッドのみ使うだけで良いとする (文字列を返す toString()も用いること )。

Page 33: 第 14 回独習 Java ゼミ

演習問題

2. プログラム例(2)を参考に、線を引く機能を持った、簡単な絵描きプログラムを作成せよ。(ヒント: repaint()メソッドが呼ばれると、背景色で一度上塗りされた後に paint()メソッドが呼ばれる。これをせずに paint()メソッドへ移行させる必要があるため、 update()メソッドをオーバーライドする必要がある)