所以我在公共类中有一个带有一些方法的MouseListener类。 我已将mouseListener附加到公共类中的组件。
问题是我无法想出一种简单的方法来调用公共类中的方法,每当我说例如this.showRemove();
时,范围来自处理程序类而不是公共类。这是一些示例代码
public class Game {
public Game() {
JPanel pnl = new JPanel();
pnl.addMouseListener(new GameMouseListener());
}
public void showRemove(){
//Code Here
}
class GameMouseListener implements MouseListener {
public void mouseClicked(MouseEvent e) {
this.showRemove(); //Can't Find Symbol Here
}
}
}
答案 0 :(得分:4)
在内部类中使用this
时,您指的是内部类的实例,而不是主机类。
由于您的内部类不是静态内部类,您可以使用它的类名来访问对宿主类的引用,如下所示:
HostClass {
doSomething() {}
class Inner {
void blah() {
HostClass.this.doSomething();
}
}
}
除非您在内部类中调用的方法 ,否则可以避免显式命名,只需使用方法名称:
void blah() {
doSomething();
}
答案 1 :(得分:1)
由于showRemove
是Game
的非静态方法,因此您需要该类的实例来调用该方法。
您可以改为创建一个匿名内部类:
pnl.addMouseListener(new MouseAdapter() {
public void MouseClicked (MouseEvent e) {
showRemove();
}
});
此侦听器将与Game
的正在运行的实例相关联,因此可以访问其非静态方法。
答案 2 :(得分:0)
您需要对Game对象的引用才能调用该方法。当你说this.showRemoved()“this”引用MouseListener对象而不是Game对象时。
一种可能性是让Game类扩展MouseListener,并将mouseClicked()方法放在Game类中。