1

情况如下:

我的理解是,当为方法提供参数时(在这种情况下,它将是来自“AbstractButton”类的“addActionListener”方法),提供的对象需要是所需的类型之一(即:“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(父类也没有)

有人可以澄清 addActionListener 接受这个对我来说似乎是错误类型的论点吗?

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

谢谢你的时间,杰伊

4

1 回答 1

1

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

这里的this实例是指您的类的实例,Window不是JRadioButton.

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

于 2012-11-22T22:03:14.033 回答