第 14 回独習 java ゼミ
DESCRIPTION
第 14 回独習 Java ゼミ. セクション1~3 発表者 直江 宗紀. GraphicalUserInterface(GUI). グラフィカルユーザーインターフェイスとは グラフィカルな表示等による視覚的操作が出来る 操作はマウス等のポインティングデバイスが中心 コマンドライン上の操作がメインの CUI(Character-based User Interface) とは違う GUI ベースのプログラム 「イベントドリブン」である必要性. イベントドリブン. イベントドリブンとは ユーザーが操作をした時にプログラム処理 何も無ければ待機状態 - PowerPoint PPT PresentationTRANSCRIPT
第 14回独習 Java ゼミ
セクション1~3発表者直江 宗紀
GraphicalUserInterface(GUI)
グラフィカルユーザーインターフェイスとは グラフィカルな表示等による視覚的操作が出来る 操作はマウス等のポインティングデバイスが中心 コマンドライン上の操作がメインの
CUI(Character-based User Interface)とは違う
GUIベースのプログラム 「イベントドリブン」である必要性
イベントドリブン
イベントドリブンとは ユーザーが操作をした時にプログラム処理 何も無ければ待機状態 リアルタイム状態 (ポーリング )での欠点→ CPU処理資源を著しく欠いてしまう
単純な処理の流れ待機 イベント通知待ち 処理・実行
イベント通知の間は何もしない
代行イベントモデル(1)
イベントドリブンインターフェイス 定義する方法は数種類存在する イベントモデルにより特定のメカニズムが決まる 現在の JDKでは、代行イベントモデルが使われている
代行イベントモデル ユーザが操作した際にソースから、その操作を示すオブジェクトのイベントを生成し、イベントオブジェクトを一連のリスナ (イベント監視 )に送信する標準メカニズムのこと
ソース
ソース イベント (のオブジェクト )を生成する元 (資源 ) ソースの責任
リスナが特定のタイプのイベントに関する通知を登録・登録解除できるようにするメソッドを提供すること
イベント (のオブジェクト )の生成 登録されたリスナ全てにイベントを送信すること(イベントは、単一のリスナに対するユニキャストでも、複数のリスナに対するマルチキャストでも構わない)
イベント
イベント ソースにおける状態変更を表すオブジェクト ソースの状態変更とは→ユーザがアプレットに行った操作全般のこと
イベントの生成タイミング→ GUI内の要素に対して操作を行った時 ボタンを押す マウスをクリックする ウィンドウを閉じたりする・・・等
リスナ
リスナ イベント通知(イベントオブジェクトの送信)を受ける
リスナの責任 特定のイベントに関する通知を受け取ることを登録する そのタイプのイベントを受け取るインターフェイスを実装すること( implementsにより受け取るイベントを作る)
通知を受け取る必要が無くなった場合には登録を解除する
代行イベントモデル(2)
代行イベントモデルのモデル図
ソース
イベント
リスナ
リスナ
リスナ
代行イベントモデル(3)
イベントに関する情報をカプセル化 クラス java.awt.event.ActionEvent
→ソース、イベント、リスナを扱うためのメソッドが内包されている
オーバーライド無しでも明示的にやり取りが行われる
次章において、詳細に扱う
ソース実装メソッド
addTypeListener()メソッド public void addTypeListener(TypeListener el)
特定タイプのイベントリスナ (el)を複数登録 public void addTypeListener(TypeListener el)
throws TooManyListenersException 特定タイプのイベントリスナ( el)を一つ登録
removeTypeListener()メソッド public void removeTypeListener(TypeListener el)
特定タイプのイベント通知の登録を解除
イベント登録及び受け取りメソッド アクションイベント受け取りの登録または解除 void addActionListener(ActionListener al) void removeActionListener(ActionListener al)
al:リスナオブジェクトの参照 リスナは java.awt.event.ActionListenerインターフェースを実装しなければならない
アクションイベント受け取り void actionPerformed(actionEvent ae)
ae:アクションイベントの参照
イベントクラス
様々な GUI要素 Abstract Window Toolkit(AWT)
→ボタン、チェックボックス。スクロールバーなどの一連の標準コンポーネントを提供している
イベントクラス 各種タイプの AWTイベントを表す一連のクラスが用意
イベントオブジェクト
EventObject Objectを拡張したクラス java.utilパッケージに含む コンストラクタ
EventObject(Object src) 主なメソッド
Object getSouce() イベントを生成したオブジェクトを返す
Stng toString() イベントの等価の文字列を返す
AWTイベントクラス
AWTEventクラス 全ての AWTイベントクラスはこのクラスのサブクラス
java.awtパッケージに含まれる コンストラクタ
AWTEvent(Object source,int id) source:イベントを生成するオブジェクト id:イベントのタイプ
メソッド int getID()
イベントのタイプを返す String toString()
ComponentEvent クラス(1)
ComponentEventクラス AWTEventクラスを拡張したクラスの一つ 各種コンポーネントイベントのタイプの識別に使用する int型定数が定義される
コンストラクタ ComponentEvent(Conponent src,int type)
src:イベントを生成したオブジェクトの参照 type:イベントのタイプ
メソッド Component getComponent()
srcを生成したコンポーネントを返す
ComponentEvent クラス(2)
ComponentEventクラスの主な定数 COMPONENT_HIDDEN
コンポーネントが隠れた COMPONENT_MOVED
コンポーネントが移動した COMPONENT_RESIZED
コンポーネントのサイズが変更された COMPONENT_SHOWN
コンポーネントが表示可能になった
主なイベントクラス(1)
java.awt.eventに含まれる主なイベントクラス
イベント 生成される条件ActionEvent ボタンを押した時、リスト項目をダブルクリックした時、
メニュー項目を選択した時AdjustmentEvent スクロールバーを操作した時ComponentEvent コンポーネントが隠れた、移動した、サイズ変更された、
表示可能になった時ContainerEvent コンポーネントがコンテナに追加した、またはコンテナか
ら削除した時FocusEvent コンポーネントがキーボードフォーカスを取得した、また
は失った時InputEvent マウスイベントまたはキーイベントが発生した時
主なイベントクラス(2)
java.awt.eventに含まれる主なイベントクラス (続き )イベント 生成される条件ItemEvent チェックボックスまたはリスト項目をクリックした時、チョイ
スで選択を行った時、チェック可能メニュー項目を選択または選択解除した時
KeyEvent キーボードから入力を受け取った時MouseEvent マウスをドラックまたは移動した時、クリックした時、押した
時、話した時、その他、マウスをコンポーネントに入れた、またはコンポーネントから出した時
TextEvent テキストエリアまたはテキストフィールドの値を変更した時WindowEvent ウィンドウを活動化した時、閉じた時、非活動化した時、アイ
コン化解除した時、開いた時、終了した時
InputEvent クラス
InputEventクラス ComponentEventクラスのサブクラス KeyEvent、MouseEventをサブクラスに持つ Inputに関する情報を扱う場合に使用できる int型整数 (修飾子 )が定義されている ALT_MASK,CTRL_MASK,等
getModifiers()メソッド int getModifiers()
イベントの修飾子フラグを全て含む int型の値を返す
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:ポップアップメニュー表示の可否
MouseEvent クラス(2)
マウスイベントのタイプ識別のための int型定数
定数 説明MOUSE_CLICKED マウスをクリックしたMOUSE_DRAGGED マウスをドラッグしたMOUSE_ENTERED マウスがコンポーネントに入ったMOUSE_EXITED マウスがコンポーネントから出たMOUSE_MOVED マウスを移動したMOUSE_PRESSED マウスを押したMOUSE_RELEASED マウスを放したMOUSE_WHEEL マウスのホイールを回した
MouseEvent クラス(3)
主なメソッド int getX(),int getY()
イベント発生時のマウス座標を返す Point getPoint()
java.awt.Pointクラスは座標のカプセル化をする インスタンス変数として x,yがある
void translatePoint(int x,int y) イベントの場所の変更
int getClickCount() イベント発生時のマウスクリック回数を返す
イベントリスナ(1)
java.util.EventListenerインターフェイス イベントクラスにより作られたイベントを処理する
それぞれのイベントクラスに対応したリスナインターフェイスがある
インターフェイスは全て java.awt.eventパッケージで宣言されている
イベントリスナ(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
MouseListener について(1)
イベント通知の登録及び解除 Componentクラスのメソッドを用いる
void addMouseListener(MouseListener ml) void addMouseMotionListener(MouseMotionListener mml)
それぞれのイベント通知を登録 (通知可にする ) void removeMouseListener(MouseListener ml) void removeMouseMotionListener(MouseMotionListener m
ml) それぞれのイベント通知登録を解除
MouseMotion ドラッグやポインタが動かされる時に起きるイベント
MouseListener について(2)
マウスイベントを受けるインターフェイスの実装 MouseListenerインターフェイスの場合 実装するメソッド
void mouseClicked(MouseEvent me) void mouseEntered(MouseEvent me) void mouseExited(MouseEvent me) void mousePressed(MouseEvent me) void mouseReleased(MouseEvent me)
MouseListener について(3)
マウスイベントを受けるインターフェイスの実装(続き) MouseMotionListenerインターフェイスの場合 実装するメソッド
void mouseDragged(MouseEvent me) void mouseMoved(MouseEvent me)
使用例(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() ; }
(次ページに続く…)
使用例(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() ; }
}
使用例(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){ } 次ページ
に続く…
使用例(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) ; } }
}
演習問題
1. プログラム例(1)を参考にキーボードから入力されたキーを表示するプログラムを作成せよ。利用するリスナインターフェイスは KeyListener実装すべきメソッドはvoid keyPressed(KeyEvent ke)void keyReleased(KeyEvent ke)public void keyTyped(KeyEvent ke)の3つであるが、 KeyPressedメソッドのみ使うだけで良いとする (文字列を返す toString()も用いること )。
演習問題
2. プログラム例(2)を参考に、線を引く機能を持った、簡単な絵描きプログラムを作成せよ。(ヒント: repaint()メソッドが呼ばれると、背景色で一度上塗りされた後に paint()メソッドが呼ばれる。これをせずに paint()メソッドへ移行させる必要があるため、 update()メソッドをオーバーライドする必要がある)