java - actionPerformed(ActionEvent e) 方法中的对象是什么

标签 java user-interface actionlistener

既然是MoveListener的方法,为什么对象是GridButton呢? 如果我将其更改为 this.setContentAreaFilled(true),则不会编译,因为该对象是 MoveListener。

private class GridButton extends JButton {

    public GridButton() {
        setOpaque(false);
        setContentAreaFilled(false);
        setBorderPainted(false);
        addActionListener(new MoveListener());
    }

    private class MoveListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            setContentAreaFilled(true);
        }       
    }

}

最佳答案

由于您的 MoveListener 内部类未声明为 static,因此它本质上携带对使用它的外部类实例的引用。

因为它具有对外部类的引用,Java 编译器能够推断出您的意思,因为它是当前范围内具有该名称的唯一可访问方法。 this 引用 actionPerformed 方法中的 MoveListener,但是如果您执行了 GridButton.this.setContentAreaFilled(true)它应该也可以工作,因为您明确要求 GridButton 实例。

唯一需要使用 OuterClassName.this.methodName 样式的情况是外部类和内部类共享一个具有相同名称和签名的方法,这样就不清楚是哪个方法需要调用方法。

有关此主题的更多信息,请阅读 Nested Classes .

关于java - actionPerformed(ActionEvent e) 方法中的对象是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469583/

相关文章:

java - 我无法修复 "Exception in thread "main"java.lang.ArithmeticException :/by zero"

java - 与第三方命令行程序的提示交互与 Windows 命令提示有何不同?

java - 如何使用带有 <h :commandLink/>? 的锚定系统

css - 您如何为网站使用调色板?

java - 从按钮启动 JFrame

java - ActionListener 的语法错误

java - 帮助实现 JComboBox[] Listener

java - 如何使用 OKHttp 发送一个空正文的 POST

java - Java中的货币转换问题

java - 从按钮数组中获取文本