0
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Appwindow extends Frame{
    String keymsg="This is a test";
    String mousemsg="";
    int mouseX=0, mouseY=0;
    public Appwindow()
    {
            addKeyListener(new MyKeyAdapter(this));
        addMouseListener(new MyMouseAdapter(this));
        addWindowListener(new MyWindowAdapter());
    }

    public void paint(Graphics g)
    {
        g.drawString(keymsg,10,40);
        g.drawString(mousemsg,mouseX,mouseY);
    }

    public static void main(String args[])
    {
        Appwindow ap = new Appwindow();
        ap.setSize(new Dimension(300,300));
        ap.setTitle("Application");
        ap.setVisible(true);
    }
}

class MyKeyAdapter extends KeyAdapter{
    Appwindow a;
    public MyKeyAdapter(Appwindow a)
    {
       this.a=a;
        }
    public void keyTyped(KeyEvent e)
    {
    a.keymsg += e.getKeyChar();
    a.repaint(); 
   }
}

class MyMouseAdapter extends MouseAdapter{
Appwindow a;
public MyMouseAdapter(Appwindow a)
{
    this.a=a;
}
public void mousePressed(MouseEvent e)
{
    a.mouseX=e.getX();
    a.mouseY=e.getY();
    a.mousemsg="Mouse down at" + a.mouseX+ "," + a.mouseY;
    a.repaint();
}
}

 class MyWindowAdapter extends WindowAdapter{
  public void windowClosing(WindowEvent e)
 {
    System.exit(0);
}
}

これは、フレーム ベースのウィンドウ プログラムを作成するための簡単なコードです。イベントリスナーの登録中にこれを使用することの意味は何ですか...のようにaddMouseListener(new MyMouseAdapter(this));

このコード行で実際に何が起こっているのか説明してください。

4

5 に答える 5

0

どこで使用しても、常にthis 現在のオブジェクトを参照します。

MyMouseAdapter(this));

つまりAppwindow 、メソッドに電流を渡すことを意味します

 public MyMouseAdapter(Appwindow a)

MyMouseAdapterメソッドでいくつかのタスクを実行できるよう にAppwindow

于 2013-10-12T13:20:22.960 に答える
0

オブジェクト (これ) (ウィンドウ) でイベントが発生したときに通知するように、アクション リスナーに指示しています。マウスから送信されたイベントを入力します。テレビのチャンネルを購読しているようなものです。あなたは、「聞き手さん、ウィンドウでマウス イベントが発生したら教えてください」と言います。このリスナーに実装する必要があるインターフェイス メソッドで通知されます。

于 2013-10-12T13:21:43.097 に答える
0

この質問は古いことは知っていますが、同じことを考えていて、この質問に出くわしました。提供された回答は役に立ちましたが、全体像はわかりませんでした。

私は、同じ質問を持つ他の人が概念をより簡単に理解できるようにコメントを付けた次のプログラムから概念を理解しました。

 public class MousePressedDemo extends Applet {

   public void init(){

  //question was why we are passing "this" in line below
  //at this point just understand like any use of "this" keyword 
  // it points to current
  //object of class MousePressedDemo or current applet window
  //we are passing it to the constuctor of MyMouseAdapter class

  addMouseListener(new MyMouseAdapter(this); // why we pass this in this line 

  }

 } // closing class MousePressedDemo 

 class MyMouseAdapter extends MouseAdapter{

 // line below creates ref var of class MousePressedDemo 
 //to which we can assign an object of type class MousePressedDemo

 MousePressedDemo mousePressedDemo;  

 //below constructor taking object of class MousePressedDemo as parameter.
 public MyMouseAdapter(MousePressedDemo mousePressedDemo){ 

  // the line below is the answer we are looking for. The object of class  
  // or applet window  We pass as "this" is now passed to a ref variable in  
  // this class. now using this reference var we can access the original 
  // applet window. look below to see how it is used to show message  
  // on status bar of original window

   this.mousePressedDemo = mousePressedDemo; 

}// closing constuctor


 public void mousePressed(MouseEvent me){

 // show message on status window of original applet class

mousePressedDemo.showStatus("MOuse Pressed");

 } // close method


} // closing class MyMouseAdapter 
于 2014-07-29T14:03:48.767 に答える
0

thisインスタンス コンテキストでのみ使用できる参照です。つまり、操作している現在のオブジェクトを参照します。Frameは多数のリスナー ( 、 など) を登録できKeyListenerますMouseListener。カスタム クラスの実装は、Frameそれらを登録している への参照が必要です。これを実現する 1 つの方法は、クラスのコンストラクターを介して現在のFrame(つまりAppWindow) オブジェクトへの参照を渡すことです。this

于 2013-10-12T13:22:37.850 に答える