addActionListener和“this”

时间:2012-11-20 23:39:25

标签: java inheritance listener this actionlistener

情况如下:

我的理解是,在为方法提供参数时(在本例中,它将是“addActionListener”方法,来自“AbstractButton”类),所提供的对象需要是所需类型的(即: “ActionListener”用于“addActionListener”)或实现所需类型的类的类(即:实现“ActionListener”接口的类)。

另外,根据我的理解,“this”指的是当前正在调用其方法的类实例,否则指的是包含类。

现在这里有一些简单的代码:

public class Window extends JFrame implements ActionListener {
    public Window () {
        ...
        private JRadioButton  btn = new JRadioButton("Option");
        btn.addActionListener(this);
    }

    public actionPerformed ( ActionEvent e ) {
        ...
        ...
    }
}

所以这是我的问题:这段代码按原样运行:“this”关键字指的是被调用方法的对象的实例(“btn”),该按钮充当自己的监听器(这是什么意思),并且单击按钮时,按预期调用actionPerformed方法。但是,由于以下原因,我不明白为什么会这样:

  1. addActionListener要求将ActionListener作为参数
  2. “btn”属于JRadioButton
  3. JRadioButton不是ActionListener类型
  4. JRadioButton不实现ActionListener(父类也不实现)
  5. 有人可以澄清addActionListener接受这个参数的事实,这对我来说似乎是错误的类型吗?

    注意:我知道此示例中的Window类确实实现了ActionListener,但我没有看到它如何与btn变量的类型和addActionListener请求的类型进行交互。

    谢谢你的时间, 杰

1 个答案:

答案 0 :(得分:1)

  

“this”关键字指的是调用其方法的对象的实例(“btn”)

此处的this个实例是指您的班级Window不是 JRadioButton的实例。

由于类Window实现了ActionListener,因此actionPerformed的实现可以作为JRadioButton组件的具体实现,提供两个类之间的交互。