在方法中使用this关键字引用对象?

时间:2014-01-03 13:12:42

标签: java

如何在mouseEntered方法中使用this关键字引用对象? 由于this关键字接近引用mouseAdapter类?

public class JButtonx extends JButton {
public String name;
public JButtonx(String xe) {
    this.name = xe;
    this.setText(this.name);
    this.setForeground(new Color(255,255,255));
    this.setBounds(346, 6, 88, 25);
    this.setOpaque(true);
    this.setBackground(new Color(100,100,100));
    this.setFocusPainted(false);

    this.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseEntered(java.awt.event.MouseEvent evt) {
            //The error occures here.
            this.setBackground(new Color(100,100,100));

        }
    });
}
}

4 个答案:

答案 0 :(得分:5)

在嵌套类中,您可以省略this关键字,只使用方法或字段的名称。非静态嵌套类可以访问外部类的字段和方法。

this.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseEntered(java.awt.event.MouseEvent evt) {
        setBackground(new Color(100,100,100));
    }
});

正如其他人建议您可以在this之前放置类名,然后调用该方法。此表单更详细,可能更容易理解,它还允许您在外部和嵌套类中具有相同名称的两个方法或字段之间进行指定。

this.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseEntered(java.awt.event.MouseEvent evt) {
        JButtonX.this.setBackground(new Color(100,100,100));
    }
});

要详细了解嵌套类中的字段和方法访问权限,请检查Java Tutorial

答案 1 :(得分:1)

尽管Kevin Bowersox的回答更好,因为你真的不应该这样做,这就是你要找的:

    this.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseEntered(java.awt.event.MouseEvent evt) {
        Classname.this.setBackground()...
    }
});

答案 2 :(得分:0)

这里this引用您实现的匿名内部类,即MouseAdapter的实例,并且您在相应的重写方法中使用this,所以很明显this是指MouseAdapter

的实例

所以改为YourClassName.this

this.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseEntered(java.awt.event.MouseEvent evt) {
        //The error occures here.
        JButtonX.this.setBackground(new Color(100,100,100));

    }
});

答案 3 :(得分:0)

您可以使用JButtonx.this来引用JButtonx。另一种方法是编写类似

的方法
public void setHoverState(){
    this.setBackground(new Color(100,100,100));
}