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

时间:2014-08-24 07:43:07

标签: 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);
        }       
    }

}

1 个答案:

答案 0 :(得分:2)

由于MoveListener内部类未声明static,因此它本身带有对使用它的外部类实例的引用。

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

唯一需要使用{{1}}样式的方法是,如果外部类和内部类共享一个具有相同名称和签名的方法,则需要调用哪个方法是不明确的。< / p>

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