welcome: please sign in
location: "イベントドリブン"の差分
25と26のリビジョン間の差分
2009-12-09 00:46:56時点のリビジョン25
サイズ: 4291
編集者: masahiko
コメント:
2009-12-09 00:47:35時点のリビジョン26
サイズ: 4297
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 49: 行 49:
インスタンスが作成されたときに指定すればよいので、コンストラクタ内に記述します。 インスタンスが作成されたときに一度指定すればよいので、コンストラクタ内に記述します。

イベントドリブン

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

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

引数や型は後ろのサンプルを見て下さい。


演習(続き)

drawImageメソッドを使って画像の一部をウインドウ内の一部に表示しましたが、 表示位置を変数px,pyで指定するように修正しなさい。

  • event3.png

そのためにはpx,pyをインスタンス変数として宣言し、初期化しておかなければなりません。

  • 下のサンプルを参照。

mousePressedメソッドの本体に2行追加します。

  • px = px + 5;
  • 表示位置を指定する変数の値を5増やしています。
  • repaint();
  • イベントキューに再描画を依頼するイベントを送ります。

  • event4.png

以上でマウスのボタンを押したら画像の表示位置が右に5ドットずつずれるようになります。

もとの位置にも画像が残ってしまいますが、このままでかまいません。

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

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