请教swing中添加事件监听器的两种方式?

第一种方式:
class myframe extends JFrame implements actionListerner{
.......
......

myButton.addActionListener(this);

}

这种形式中,参数this是啥?为什麽不是监听类的对象?在下面第二种方式中,不用implements也可以实现,那么在这里用了implement有什麽用呢?

第二种方式:
class myframe extends JFrame{
.......
......

myButton.addActionListener(new actionListerner{.....});

}
其中new actionListerner这一段,这个叫匿名类吧?

我是初学,以前只懂一点Javascript,现在学java,感觉它的事件响应方面的语法好难懂.
关于事件监听,如果还有其他什麽语法方式,请告诉我.
或者还有其他什麽值得注意的,也请告诉我.

[size=x-large][color=red]看了你问的问题,感觉你的JAVA基础还是很薄弱的.

首先,回答你第一个问题,在java中,有两个变量名,this and super,就像JS中也有这样的,this.在JS中JS指的是onclick所在的这个控件吧.而在Java中,this指的是当前对象.super指的示的是父类.
其次,你要明面JButton的addActionListener方法的参数是一个ActionListener接口类型的.这就是说任何继承ActionListener的类都可以做为参数传进来.

最后,那么在继承一个接口之后,JAVA语言规定,必须实现ActionListener的所有方法.那么你就根据ActionListener的定义,实现它的public void actionPerformed(ActionEvent e);方法.[/color][/size]下面是给出的代码(JDK1.5运行通过的):
这是你第一种方法实现.
[code="java"]
package com.Test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/*

  • created time:下午11:48:11
  • creator: Tian Zhichao (chinoistzc@gmail.com)
    *
    /
    public class MyFrame extends JFrame implements ActionListener {
    JButton btn = new JButton("点我");
    /
    *

    • main()
    • 2010-4-8,下午11:48:11 */ public static void main(String[] args) { // TODO Auto-generated method stub MyFrame frm = new MyFrame(); frm.btn.addActionListener(frm); frm.add(frm.btn); frm.setSize(200, 400); frm.setVisible(true);

    }
    public void actionPerformed(ActionEvent e) {

    JOptionPane.showMessageDialog((JButton)e.getSource(), "有效果!");
    

    }

}
[/code]
这是你第二种方法实现:
[code="java"]package com.Test;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/*

  • created time:下午11:48:11
  • creator: Tian Zhichao (chinoistzc@gmail.com)
    *
    /
    public class MyFrame extends JFrame {
    JButton btn = new JButton("点我");
    /
    *

    • main()
    • 2010-4-8,下午11:48:11
      */
      public static void main(String[] args) {
      // TODO Auto-generated method stub
      MyFrame frm = new MyFrame();
      frm.btn.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e) {

          JOptionPane.showMessageDialog((JButton)e.getSource(), "有效果!");
      }});
      

      frm.add(frm.btn);
      frm.setSize(200, 400);
      frm.setVisible(true);

    }

}[/code]

[size=x-large][color=red]希望对你有所帮助[/color][/size]