【问题标题】:addActionListener and "this"addActionListener 和 "this"
【发布时间】:2012-11-20 23:39:24
【问题描述】:

情况如下:

我的理解是,当为方法提供参数时(在这种情况下,它将是来自“AbstractButton”类的“addActionListener”方法),提供的对象需要是所需的类型之一(即: “addActionListener”的“ActionListener”)或实现所需类型的类的类(即:实现“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”),按钮充当自己的侦听器(this是预期的),并且在单击按钮时按预期调用 actionPerformed 方法。但是,我不明白为什么会这样,因为以下原因:

  1. addActionListener 请求一个 ActionListener 作为参数
  2. “btn”是 JRadioButton 类型
  3. JRadioButton 不是 ActionListener 类型
  4. JRadioButton 没有实现 ActionListener(父类也没有)

有人可以澄清 addActionListener 接受这个在我看来类型错误的论点吗?

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

感谢您的宝贵时间, 周杰伦

【问题讨论】:

    标签: java inheritance listener this actionlistener


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多