ホームページ > Java > &#&チュートリアル > JAVAイベント処理機構の詳しい説明

JAVAイベント処理機構の詳しい説明

零下一度
リリース: 2017-06-25 10:38:39
オリジナル
2194 人が閲覧しました

教師と生徒のサンプルを 2 つのセクションに続けて書きましたが、このサンプルを 100 回再生したにもかかわらず、実際のコードの書き方がまだわかりません。このセクションから、実際のコードに近づいていきます。

最も理解しやすいイベントの例はマウス イベントです。マウスをクリックすると、マウスはコードを実行する命令を送ります。

1: マウスクリックイベント処理モデルの基本バージョン

この時点で、JDK 内の関連する型をチェックアウトする必要があります。前のセクション「JAVA イベント処理の仕組みをゼロから理解する (2)」の UML 図を比較すると、宿題リスナーに対応するマウスリスナーが JDK に存在することがすぐにわかりました。実際、マウスリスナーはイベントリスナーを継承していることも解析によってわかります。 MouseListener インターフェイスができたので、このクラスは ConcreteMouseListener という名前であると仮定します。最初に実装することもできます:

package com.zuikc.events;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class ConcreteMouseListenerimplements MouseListener {

public ConcreteMouseListener() {

}
@Override
public void MouseClicked(MouseEvent e) {
System.out.printf("{%s} にクリックされたので、MD がかゆいです~~", e.getSource().toString ( ); // TODO 自動生成メソッド スタブ
@Override

public void MouseEntered(MouseEvent e) // TODO 自動生成メソッドスタブ

}

}

クリックイベントハンドラーのビジネスコードを追加します。


イベントハンドラ: リスナーの特定の実装クラスの実装メソッドをイベントハンドラと呼びます。




次に注目するのは、もちろん MouseEvent です。 MouseEvent、JDK のこのクラスは比較的大きく、コンストラクター メソッドには多くのパラメーターがありますが、それは問題ではありません。まず、このクラスの使用方法について説明します。新しく作成する方法。


/*
* new Component() {} ここでは、event.getSource() によって取得されるイベント ソースです
*/

MouseEvent event = new MouseEvent(new Component() {}, 1, 1, 1,2 ,3,4,false);

実際の通常の状況では、MouseEvent を単独で新規にする必要はありません。JAVA は実行時にハードウェア マウスのクリック アクションをキャプチャし、基盤となる仮想マシンがインスタンス オブジェクト (下記) がこれを分析します) が、現時点では最初にそれをシミュレートしているため、新しいオブジェクトがランダムに生成されることを妨げるものではありません。 new は問題ではないことに注意してください。問題の鍵は、そのコンストラクター パラメーターの意味を知る必要があることです。重要なパラメーターは最初のパラメーターである new Component() です。これがそのイベントソースです!教師と生徒のバージョンがイベントを生成する場所を振り返ってみましょう:

public void set宿題(String宿題) {

System.out.printf("%s assign宿題 %s n", this.name, 宿題); add(宿題); 宿題イベントオブジェクト イベント = 新しい宿題イベントオブジェクト(これ);

/*
~

*/(for (宿題リスナー: 宿題リスナーリスト) {

リスナー.Update (イベント, 宿題);

は教師のビジネスコードセット宿題にあります。したがって、現在の例では、新しい MouseEvent はどこにあるのかを記述します。 Button のビジネス コードでは、Button は Teacher と似ていますが、Teacher とまったく同じではありません。パラメータは MouseEvent に渡されます。Button を Component から継承したくないので、最初に新しい一時コンポーネントを作成します。 OK、分析後、おそらく次のような独自の Button コードが得られました:

package com.zuikc.events;

import java.awt.AWTEvent;
import java.awt.AWTEventMulticaster;
import java。 awt.Component;
import java.awt.event.MouseListener;
import java.awt.peer.LightweightPeer;
使用する 使用する 使用する使用 - OFF-オフ - マウスエベントイベント= new MouseEvent(new component(){}、1、1、1,2,3,4、false)を使用して使用します。図を見てみましょう:




ところで、クライアントコードを見てみましょう:


public static void main(String[] args) {
ConcreteMouseListener listenr = new ConcreteMouseListener ();
Button button = new Button();
button.addMouseListener(listener);
button.doClick();
}

実行すると、次のような出力が得られるはずです。

私は { com.zuikc.events. Button$1[,0,0,0x0,invalid]} をクリックしました、MD はかゆいです~~

JAVAイベント処理機構の詳しい説明

第二に、標準形式プログラムはどのようなものですか

上記では、次の例に焦点を当てるために最善を尽くしました。教師と生徒が協力して、マウス イベントの基本バージョンを作成しましたが、プログラムの本来の外観は何でしょうか?さあ、次は普通のプログラムを書いてみましょう。帳票プログラムを書くときは、99.9%の人がこのように書きます。皆さんの中には、またお叱りを受ける人もいると思いますが、Java、フォーム プログラムとは何ですか?私はEE開発とエンタープライズ開発のためにJAVAを学びました。さて、まず、お互いを傷つけるべきかどうかについて話しましょう。JAVA のような NB でさえ、最初はフォームから利益を得たということを知っておく必要があります。さらに、JAVA のフォーム フレームワークは何度も覆され、書き直されました。つまり、フォームのイベントを理解しており、EE のフレームワークのイベントはキャベツを切るのと同じです。

本題に戻り、コードを見てみましょう:


package com.zuikc.events;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JButton ;

import javax.swing.JFrame;

public class Client {

public static void main(String[] args) {

new DemoFrame(); }}

class DemoFrame extends JFrameimplements MouseListener {

public DemoFrame () {

super ("demo");
this.setSize(500, 400);

this.setLocationRelativeTo(null);

this.getContentPane().setLayout(null);

this.setVisible(true);

jbutton button1 = new jbutton( "ok");
butth1.setbounds(8、8、80、80);

butth1.addmouseListener(this); public void MouseClicked(MouseEvent e) {

System.out.printf("{%s} にクリックされました。MD は死ぬほどかゆいです~~", e.getSource().toString());
使用する 使用する 使用する使用 mouseEvent e) {
}

@Override

public void (MouseEvent e) {

}

@Override
public void MouseEntered(MouseEvent e) {
}

@Override
public void MouseExited(MouseEvent e) {
}
}

このコードは何を意味しますか?最も簡単な方法は、フォームを作成し、そのフォーム上にボタンを配置し、クリックされるとコード行が実行されることです。コード行数がそれほど多くないこの単純なファイルは、実際には上記の多数のクラスで実装された関数を実装します。さあ、これを分析して、リスナー、イベント ハンドラー、イベント、イベント ソースを指摘してみましょう。

Listener: DemoFrame は ConcreteMouseListener に対応するリスナーです。

Event ハンドラー: MouseClicked メソッドはリスナーであり、ConcreteMouseListener にもこのメソッドがあります。

Event: 表示されません。どうすればよいですか?

イベントソース: 表示されません。どうすればよいですか?

フォーム自体にはリスナーがあることに注意してください。では、上記のコードのボタンにリスナーを追加するにはどうすればよいでしょうか? button1.addMouseListener(this); はい、自分自身を追加するだけです。

それではイベントもイベントソースも見当たりません この時はどうすればいいでしょうか?出力を見ると、上記のコードの出力は次のようになります:

I was {javax.swing.JButton[,8,8,80x80,invalid,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf .BorderUIResource $CompoundBorderUIResource@7fda7dfe,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2] ,right =14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=ok,defaultCapable=true]} をクリックすると、MD がかゆくなりました ~~

調べる、上記のコードの最初の部分の出力と同様に、これも JButton ビジネス コードの実行中に生成される変数ですが、どこで生成されるかはわかりません。しかし、それは問題ありません。デバッグ スタックを見てみましょう。

段階的に進めて、最終的にここに到達しました:

JAVAイベント処理機構の詳しい説明

ビジネス コードでは、MouseEvent も新しいことがわかります。この重要な最初のパラメーターのターゲットについて心配しているかもしれません。ターゲットですが、イベント ソースも非常に重要です。理由は非常に単純です。スペースの都合上、ここでは展開しません。

これで答えが完成します。

イベント: JAVA ランタイムはハードウェア マウス トリガーをキャプチャし、イベント プロセッサー内で生成される MouseEvent がイベントです。

イベント ソース: JAVA ランタイムハードウェア マウス トリガーは次のとおりです。イベント プロセッサ内で生成されたターゲットはイベント ソースです

3: 上記の最初の部分のコードの通常バージョン

2 番目の部分のコードに従います。コードの最初の部分はどのようになるべきでしょうか?

1 つと 2 つを比較すると、実際には、2 か所が変更されている限り、1 つのコードは 2 つ目のコードと完全に同じです。

1: ConcreteMouseListener DemoFrame に名前を付けます

2: ボタンを変更します。インスタンスをクライアントに ConcreteMouseListener 内に配置します

OK、イベントはとても簡単です。

このシリーズの前編と後編はそれぞれ次のとおりです:

1: JAVA イベント処理の仕組みをゼロから理解する (1)

2: JAVA イベント処理の仕組みをゼロから理解する (2)

以上がJAVAイベント処理機構の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート