如何在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));
}
});
}
}
答案 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));
}