welcome: please sign in
location: "イベントドリブン"の差分
10と14のリビジョン間の差分 (その間の編集: 4回)
2009-12-04 01:50:07時点のリビジョン10
サイズ: 1662
編集者: masahiko
コメント:
2009-12-04 02:11:00時点のリビジョン14
サイズ: 3295
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 25: 行 25:
---- -----
行 29: 行 29:
作成するクラスはJPanelとmouseListenerの2つの親を持たなければなりません。 === クラスの定義 ===
作成するクラスはJPanelと!MouseListenerの2つの親を持たなければなりません。
行 32: 行 33:
 . Javaではスーパークラスとして指定できるのは1つだけです。
 . JPanelクラスを継承します
Javaではスーパークラスとして指定できるのは1つだけです。
 . JPanelクラスを継承することは次のように書きま
行 35: 行 36:
 . インターフェースはスーパークラスとしての指定ではなく実装の指定をします。
   . implements mouseListener
 . インターフェースは次のように実装の指定として書きます。
   . implements !MouseListener
 . !MouseListenerはjava.awt.eventパッケージ内にあります。
 {{{
 import java.awt.event.*;
 public class Lesson11 extends JPanel implements MouseListener
 {
    ...
 }
 }}}
----
=== リスナの指定 ===
このインスタンスがマウスイベントのリスナとなることを指定するために次のように記述します。
 addMouseListener(this);
インスタンスが作成されたときに指定すればよいので、コンストラクタ内に記述します。
 {{{
 Lesson11()
 {
    ...
    addMouseListener(this);
 }
 }}}
----
=== メソッドの記述 ===
!MouseListenerを実装するときには次の5つのメソッドを記述しなければなりません。
 * mouseClicked
 * mouseEntered
 * mouseExited
 * mousePressed
 * mouseReleased
対応する処理が不必要な場合は本体が空のメソッドとして定義します。

引数や型は以下のとおりです。

 {{{#!java
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
 
 public class Lesson11 extends JPanel implements MouseListener
 {
  ...
  
  Lesson11()
  {
   ...
   addMouseListener(this);
  }
  
  public void paintComponent(Graphics g)
  {
   ...
  }
  
  public static void main(String[] args)
  {
   ...
  }
  
  public void mousePressed(MouseEvent e)
  {
   sx -= 5;
   repaint();
  }
  
  public void mouseEntered(MouseEvent e) { }
  public void mouseExited(MouseEvent e) { }
  public void mouseReleased(MouseEvent e) { }
  public void mouseClicked(MouseEvent e) { }
 }
 }}}

イベントドリブン

GUI用いたプログラムは複数のスレッドで動作しています。

ボタンを押すなどのアクションやイベントに対して処理が行われます。

  • event1.png

イベントが発生するとその情報はイベントキューに入れられ、 イベントの内容に対応するイベントリスナに処理を委ねられます。


インターフェース

リスナを作成するにはインターフェースを利用します。

  • インターフェースは実体の無いクラスと考えられます。
  • インターフェースはクラス図では点線を使って表します。
  • interface.png

インターフェースでは、どのようなメソッドが必要かなどインターフェースだけが指定されています。

インターフェースを継承してクラスを作成するときには、 インターフェースで指定されているメソッドをすべて記述しなければなりません。 これを実装といいます。


画像を表示するプログラムにマウスイベントを追加します。

クラスの定義

作成するクラスはJPanelとMouseListenerの2つの親を持たなければなりません。

  • event2.png

Javaではスーパークラスとして指定できるのは1つだけです。

  • JPanelクラスを継承することは次のように書きました。
    • extends JPanel
  • インターフェースは次のように実装の指定として書きます。
    • implements MouseListener

  • MouseListenerはjava.awt.eventパッケージ内にあります。

     import java.awt.event.*;
     public class Lesson11 extends JPanel implements MouseListener
     {
        ...
     }


リスナの指定

このインスタンスがマウスイベントのリスナとなることを指定するために次のように記述します。

  • addMouseListener(this);

インスタンスが作成されたときに指定すればよいので、コンストラクタ内に記述します。

  •  Lesson11()
     {
        ...
        addMouseListener(this);
     }


メソッドの記述

MouseListenerを実装するときには次の5つのメソッドを記述しなければなりません。

  • mouseClicked
  • mouseEntered
  • mouseExited
  • mousePressed
  • mouseReleased

対応する処理が不必要な場合は本体が空のメソッドとして定義します。

引数や型は以下のとおりです。

  •    1  import javax.swing.*;
       2  import java.awt.*;
       3  import java.awt.event.*;
       4  
       5  public class Lesson11 extends JPanel implements MouseListener
       6  {
       7         ...
       8         
       9         Lesson11()
      10         {
      11                 ...
      12                 addMouseListener(this);
      13         }
      14         
      15         public void paintComponent(Graphics g)
      16         {
      17                 ...
      18         }
      19         
      20         public static void main(String[] args)
      21         {
      22                 ...
      23         }
      24         
      25         public void mousePressed(MouseEvent e)
      26         {
      27                 sx -= 5;
      28                 repaint();
      29         }
      30         
      31         public void mouseEntered(MouseEvent e) { }
      32         public void mouseExited(MouseEvent e) { }
      33         public void mouseReleased(MouseEvent e) { }
      34         public void mouseClicked(MouseEvent e) { }
      35  }
    

イベントドリブン (最終更新日時 2010-12-18 12:54:39 更新者 masahiko)