如何从处理程序中调用外部方法

时间:2011-08-17 22:38:09

标签: java class methods scope handler

所以我在公共类中有一个带有一些方法的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     

  }

 }  

}

3 个答案:

答案 0 :(得分:4)

在内部类中使用this时,您指的是内部类的实例,而不是主机类。

由于您的内部类不是静态内部类,您可以使用它的类名来访问对宿主类的引用,如下所示:

HostClass {
    doSomething() {}

    class Inner {
        void blah() {
            HostClass.this.doSomething();
        }
    }
}

除非您在内部类中调用的方法 ,否则可以避免显式命名,只需使用方法名称:

void blah() {
    doSomething();
}

答案 1 :(得分:1)

由于showRemoveGame的非静态方法,因此您需要该类的实例来调用该方法。

您可以改为创建一个匿名内部类:

pnl.addMouseListener(new MouseAdapter() {
  public void MouseClicked (MouseEvent e) {
    showRemove();
  }
});

此侦听器将与Game的正在运行的实例相关联,因此可以访问其非静态方法。

答案 2 :(得分:0)

您需要对Game对象的引用才能调用该方法。当你说this.showRemoved()“this”引用MouseListener对象而不是Game对象时。

一种可能性是让Game类扩展MouseListener,并将mouseClicked()方法放在Game类中。