平成 29 年度卒業論文 所属ゼミ 上野山ゼミ‡‘礪聖治.pdf · 平成29 年度卒業論文 『組織におけるナレッジの蓄積と活用』 所属ゼミ 上野山ゼミ
第 14 回独習 Java ゼミ
-
Upload
cedric-alston -
Category
Documents
-
view
44 -
download
8
description
Transcript of 第 14 回独習 Java ゼミ
![Page 1: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/1.jpg)
第 14回独習 Java ゼミ
セクション1~3発表者直江 宗紀
![Page 2: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/2.jpg)
GraphicalUserInterface(GUI)
グラフィカルユーザーインターフェイスとは グラフィカルな表示等による視覚的操作が出来る 操作はマウス等のポインティングデバイスが中心 コマンドライン上の操作がメインの
CUI(Character-based User Interface)とは違う
GUIベースのプログラム 「イベントドリブン」である必要性
![Page 3: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/3.jpg)
イベントドリブン
イベントドリブンとは ユーザーが操作をした時にプログラム処理 何も無ければ待機状態 リアルタイム状態 (ポーリング )での欠点→ CPU処理資源を著しく欠いてしまう
単純な処理の流れ待機 イベント通知待ち 処理・実行
イベント通知の間は何もしない
![Page 4: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/4.jpg)
代行イベントモデル(1)
イベントドリブンインターフェイス 定義する方法は数種類存在する イベントモデルにより特定のメカニズムが決まる 現在の JDKでは、代行イベントモデルが使われている
代行イベントモデル ユーザが操作した際にソースから、その操作を示すオブジェクトのイベントを生成し、イベントオブジェクトを一連のリスナ (イベント監視 )に送信する標準メカニズムのこと
![Page 5: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/5.jpg)
ソース
ソース イベント (のオブジェクト )を生成する元 (資源 ) ソースの責任
リスナが特定のタイプのイベントに関する通知を登録・登録解除できるようにするメソッドを提供すること
イベント (のオブジェクト )の生成 登録されたリスナ全てにイベントを送信すること(イベントは、単一のリスナに対するユニキャストでも、複数のリスナに対するマルチキャストでも構わない)
![Page 6: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/6.jpg)
イベント
イベント ソースにおける状態変更を表すオブジェクト ソースの状態変更とは→ユーザがアプレットに行った操作全般のこと
イベントの生成タイミング→ GUI内の要素に対して操作を行った時 ボタンを押す マウスをクリックする ウィンドウを閉じたりする・・・等
![Page 7: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/7.jpg)
リスナ
リスナ イベント通知(イベントオブジェクトの送信)を受ける
リスナの責任 特定のイベントに関する通知を受け取ることを登録する そのタイプのイベントを受け取るインターフェイスを実装すること( implementsにより受け取るイベントを作る)
通知を受け取る必要が無くなった場合には登録を解除する
![Page 8: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/8.jpg)
代行イベントモデル(2)
代行イベントモデルのモデル図
ソース
イベント
リスナ
リスナ
リスナ
![Page 9: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/9.jpg)
代行イベントモデル(3)
イベントに関する情報をカプセル化 クラス java.awt.event.ActionEvent
→ソース、イベント、リスナを扱うためのメソッドが内包されている
オーバーライド無しでも明示的にやり取りが行われる
次章において、詳細に扱う
![Page 10: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/10.jpg)
ソース実装メソッド
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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/11.jpg)
イベント登録及び受け取りメソッド アクションイベント受け取りの登録または解除 void addActionListener(ActionListener al) void removeActionListener(ActionListener al)
al:リスナオブジェクトの参照 リスナは java.awt.event.ActionListenerインターフェースを実装しなければならない
アクションイベント受け取り void actionPerformed(actionEvent ae)
ae:アクションイベントの参照
![Page 12: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/12.jpg)
イベントクラス
様々な GUI要素 Abstract Window Toolkit(AWT)
→ボタン、チェックボックス。スクロールバーなどの一連の標準コンポーネントを提供している
イベントクラス 各種タイプの AWTイベントを表す一連のクラスが用意
![Page 13: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/13.jpg)
イベントオブジェクト
EventObject Objectを拡張したクラス java.utilパッケージに含む コンストラクタ
EventObject(Object src) 主なメソッド
Object getSouce() イベントを生成したオブジェクトを返す
Stng toString() イベントの等価の文字列を返す
![Page 14: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/14.jpg)
AWTイベントクラス
AWTEventクラス 全ての AWTイベントクラスはこのクラスのサブクラス
java.awtパッケージに含まれる コンストラクタ
AWTEvent(Object source,int id) source:イベントを生成するオブジェクト id:イベントのタイプ
メソッド int getID()
イベントのタイプを返す String toString()
![Page 15: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/15.jpg)
ComponentEvent クラス(1)
ComponentEventクラス AWTEventクラスを拡張したクラスの一つ 各種コンポーネントイベントのタイプの識別に使用する int型定数が定義される
コンストラクタ ComponentEvent(Conponent src,int type)
src:イベントを生成したオブジェクトの参照 type:イベントのタイプ
メソッド Component getComponent()
srcを生成したコンポーネントを返す
![Page 16: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/16.jpg)
ComponentEvent クラス(2)
ComponentEventクラスの主な定数 COMPONENT_HIDDEN
コンポーネントが隠れた COMPONENT_MOVED
コンポーネントが移動した COMPONENT_RESIZED
コンポーネントのサイズが変更された COMPONENT_SHOWN
コンポーネントが表示可能になった
![Page 17: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/17.jpg)
主なイベントクラス(1)
java.awt.eventに含まれる主なイベントクラス
イベント 生成される条件ActionEvent ボタンを押した時、リスト項目をダブルクリックした時、
メニュー項目を選択した時AdjustmentEvent スクロールバーを操作した時ComponentEvent コンポーネントが隠れた、移動した、サイズ変更された、
表示可能になった時ContainerEvent コンポーネントがコンテナに追加した、またはコンテナか
ら削除した時FocusEvent コンポーネントがキーボードフォーカスを取得した、また
は失った時InputEvent マウスイベントまたはキーイベントが発生した時
![Page 18: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/18.jpg)
主なイベントクラス(2)
java.awt.eventに含まれる主なイベントクラス (続き )イベント 生成される条件ItemEvent チェックボックスまたはリスト項目をクリックした時、チョイ
スで選択を行った時、チェック可能メニュー項目を選択または選択解除した時
KeyEvent キーボードから入力を受け取った時MouseEvent マウスをドラックまたは移動した時、クリックした時、押した
時、話した時、その他、マウスをコンポーネントに入れた、またはコンポーネントから出した時
TextEvent テキストエリアまたはテキストフィールドの値を変更した時WindowEvent ウィンドウを活動化した時、閉じた時、非活動化した時、アイ
コン化解除した時、開いた時、終了した時
![Page 19: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/19.jpg)
InputEvent クラス
InputEventクラス ComponentEventクラスのサブクラス KeyEvent、MouseEventをサブクラスに持つ Inputに関する情報を扱う場合に使用できる int型整数 (修飾子 )が定義されている ALT_MASK,CTRL_MASK,等
getModifiers()メソッド int getModifiers()
イベントの修飾子フラグを全て含む int型の値を返す
![Page 20: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/20.jpg)
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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/21.jpg)
MouseEvent クラス(2)
マウスイベントのタイプ識別のための int型定数
定数 説明MOUSE_CLICKED マウスをクリックしたMOUSE_DRAGGED マウスをドラッグしたMOUSE_ENTERED マウスがコンポーネントに入ったMOUSE_EXITED マウスがコンポーネントから出たMOUSE_MOVED マウスを移動したMOUSE_PRESSED マウスを押したMOUSE_RELEASED マウスを放したMOUSE_WHEEL マウスのホイールを回した
![Page 22: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/22.jpg)
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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/23.jpg)
イベントリスナ(1)
java.util.EventListenerインターフェイス イベントクラスにより作られたイベントを処理する
それぞれのイベントクラスに対応したリスナインターフェイスがある
インターフェイスは全て java.awt.eventパッケージで宣言されている
![Page 24: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/24.jpg)
イベントリスナ(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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/25.jpg)
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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/26.jpg)
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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/27.jpg)
MouseListener について(3)
マウスイベントを受けるインターフェイスの実装(続き) MouseMotionListenerインターフェイスの場合 実装するメソッド
void mouseDragged(MouseEvent me) void mouseMoved(MouseEvent me)
![Page 28: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/28.jpg)
使用例(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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/29.jpg)
使用例(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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/30.jpg)
使用例(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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/31.jpg)
使用例(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 ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/32.jpg)
演習問題
1. プログラム例(1)を参考にキーボードから入力されたキーを表示するプログラムを作成せよ。利用するリスナインターフェイスは KeyListener実装すべきメソッドはvoid keyPressed(KeyEvent ke)void keyReleased(KeyEvent ke)public void keyTyped(KeyEvent ke)の3つであるが、 KeyPressedメソッドのみ使うだけで良いとする (文字列を返す toString()も用いること )。
![Page 33: 第 14 回独習 Java ゼミ](https://reader035.fdocument.pub/reader035/viewer/2022081420/56813167550346895d97dcaa/html5/thumbnails/33.jpg)
演習問題
2. プログラム例(2)を参考に、線を引く機能を持った、簡単な絵描きプログラムを作成せよ。(ヒント: repaint()メソッドが呼ばれると、背景色で一度上塗りされた後に paint()メソッドが呼ばれる。これをせずに paint()メソッドへ移行させる必要があるため、 update()メソッドをオーバーライドする必要がある)