簡體   English   中英

如何從處理程序中調用外部方法

[英]How to call an outer method from within a handler

因此,我在帶有一些方法的公共類中有一個MouseListener類。 我已經將mouseListener附加到公共類中的組件上。

問題是,無論何時說到this.showRemove();我都找不到一種簡單的方法來調用公共類中的方法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     

  }

 }  

}

當在內部類中使用this時,是指內部類的實例,而不是宿主類。

由於您的內部類不是靜態內部類,因此可以通過使用其類名來訪問對主機類的引用,如下所示:

HostClass {
    doSomething() {}

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

除非要調用的方法位於內部類中,否則可以避免顯式命名,而只需使用方法名稱即可:

void blah() {
    doSomething();
}

由於showRemoveGame的非靜態方法,因此您需要該類的實例來調用該方法。

您可以改為創建一個匿名內部類,如下所示:

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

該偵聽器將與Game的運行實例相關聯,因此可以訪問其非靜態方法。

您需要對Game對象的引用才能調用該方法。 當您說this.showRemoved()時,“ this”是引用MouseListener對象而不是Game對象。

一種可能性是讓Game類擴展MouseListener,並將mouseClicked()方法放入Game類內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM