第14回独習Javaゼミ セクション1~3 発表者 直江 宗紀.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

Ver 準備 Java フォルダに移動して …… mkdir Swing Swing フォルダに移動して …… cp ~gundam/Java/Swing. コマンドプロンプト ( JDK ) でないと起動 しないので注意!!!
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
プログラミング 平成24年1月11日 森田 彦.
社会人学習講座 「Javaプログラミング概論」
GridLayout オブジェクト(省略)
Imageの描画 画像を読み込んで表示すること。 import java.awt.*;が必要。
JSFによるWebアプリケーション開発 第9回
Applet 岡部 祐典 鈴木 敬幸.
プログラミング基礎I(再) 山元進.
文字書式設定(1) 方法1: ①文字書式を設定したい文字列を選択する。 ②「書式」メニュー → 「フォント」とクリックする。
GUIコンポーネントの設定と配置 Creation and positioning of GUI components
JAVA GUIプログラミング 第6回 TextFieldとLabel.
アプレット (Applet)について.
アルゴリズムとデータ構造1 2007年6月12日
Iアプリプログラミング その1  鳥居秀徳.
アルゴリズムとプログラミング (Algorithms and Programming)
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
 Applet アプレット ◇長い長いアプレット講座◇.
第14回 GUIの構成とイベント・ドリブン ~GUIを使ったプログラム(Ⅰ)~.
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
社会人学習講座 「Javaプログラミング概論」
JavaBeans とJSP データベース論 第5回.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
アプレット プログラミング 第10回 アプレット プログラミング第10回.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
ソフトウェア工学 知能情報学部 新田直也.
JAVA入門後期⑨ JAVAのSwingのメニュー処理
アルゴリズムとデータ構造演習(6月24日) グラフィックス、その2 テキストフィールドで入力する チェックボックスで1つ以上指定する
Java入門 13.5カラーの使用 13.6テキストの表示                  2003/12/12                   紺野憲一.
アルゴリズムとプログラミング (Algorithms and Programming)
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
第15回独習Javaゼミ セクション14~15 発表者 直江宗紀.
EVENT プログラミングのスタイル 手続き型: ある決められた場所から開始され, その後は純粋に上から下に流れて行く方式. 実行したいことを, 順番に記述してゆく. 逐次処理形式コーディングの方法である。 今までの授業(情報処理2や3)で 行ってきたプログラミングの演習 bcc32やmake 手続き型.
プログラミング演習3 第3回 ミニプロジェクト.
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
第11週:super/subクラス、継承性、メソッド再定義
プログラミング演習3 第2回 GUIの復習.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
Java/Swingについて (3) 2005年10月19日 海谷 治彦.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
JAVA入門後期③ JAVAのGUI (JavaのGUI基本構造、いろいろなアプレット)
独習Javaゼミ第10回 セクション1~3 発表者 直江 宗紀.
JAVA入門後期⑥ JAVAのAWTの基本構造 (レイアウトマネージャー、 ウインドウ型アプリケーション)
Java/Swingについて+ (4) 2005年10月26日 海谷 治彦.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第10回 Javaによる図形処理入門(2) GUIの使い方
プログラミング言語論 第十四回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
JAVA入門後期④ イベント、AWT、の基本構造、スレッド
システムエンジニアリング演習 GUIの実現(1):AWT 11月6日.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
JAVA GUIプログラミング 第3回 イベント処理① マウスイベント.
静的情報と動的情報を用いた Javaプログラムスライス計算法
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
システムエンジニアリング演習 GUIの実現(2):イベント処理 11月13日.
C#プログラミング実習 第3回.
サブゼミ第7回 実装編① オブジェクト型とキャスト.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Presentation transcript:

第14回独習Javaゼミ セクション1~3 発表者 直江 宗紀

GraphicalUserInterface(GUI) グラフィカルユーザーインターフェイスとは グラフィカルな表示等による視覚的操作が出来る 操作はマウス等のポインティングデバイスが中心 コマンドライン上の操作がメインの CUI(Character-based User Interface)とは違う GUIベースのプログラム 「イベントドリブン」である必要性

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

代行イベントモデル(1) イベントドリブンインターフェイス 定義する方法は数種類存在する イベントモデルにより特定のメカニズムが決まる 現在のJDKでは、代行イベントモデルが使われている 代行イベントモデル ユーザが操作した際にソースから、その操作を示すオブジェクトのイベントを生成し、イベントオブジェクトを一連のリスナ(イベント監視)に送信する標準メカニズムのこと

ソース ソース イベント(のオブジェクト)を生成する元(資源) ソースの責任 リスナが特定のタイプのイベントに関する通知を登録・登録解除できるようにするメソッドを提供すること イベント(のオブジェクト)の生成 登録されたリスナ全てにイベントを送信すること (イベントは、単一のリスナに対するユニキャストでも、複数のリスナに対するマルチキャストでも構わない)

イベント イベント ソースにおける状態変更を表すオブジェクト ソースの状態変更とは →ユーザがアプレットに行った操作全般のこと イベントの生成タイミング →GUI内の要素に対して操作を行った時 ボタンを押す マウスをクリックする ウィンドウを閉じたりする・・・等

リスナ リスナ イベント通知(イベントオブジェクトの送信)を受ける リスナの責任 特定のイベントに関する通知を受け取ることを登録する そのタイプのイベントを受け取るインターフェイスを実装すること(implementsにより受け取るイベントを作る) 通知を受け取る必要が無くなった場合には登録を解除する

代行イベントモデル(2) 代行イベントモデルのモデル図 リスナ イベント リスナ ソース リスナ

代行イベントモデル(3) イベントに関する情報をカプセル化 クラスjava.awt.event.ActionEvent →ソース、イベント、リスナを扱うためのメソッドが内包されている オーバーライド無しでも明示的にやり取りが行われる 次章において、詳細に扱う

ソース実装メソッド addTypeListener()メソッド removeTypeListener()メソッド 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() イベント発生時のマウス座標を返す 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クラスのメソッドを用いる MouseMotion void addMouseListener(MouseListener ml) void addMouseMotionListener(MouseMotionListener mml) それぞれのイベント通知を登録(通知可にする) void removeMouseListener(MouseListener ml) void removeMouseMotionListener(MouseMotionListener mml) それぞれのイベント通知登録を解除 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) ; public void mousePressed(MouseEvent me){ setBackground(Color.white) ; public void mouseReleased(MouseEvent me){ setBackground(Color.YELLOW) ; }

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

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